mirror of
https://github.com/logos-co/logos-tutorial.git
synced 2026-08-31 04:41:08 +00:00
Merge pull request #3 from logos-co/chore/updateLogosAppName
chore: update name oif logos-app to logos-basecamp
This commit is contained in:
@@ -250,7 +250,7 @@ Item {
|
||||
root.result = ""
|
||||
|
||||
if (typeof logos === "undefined" || !logos.callModule) {
|
||||
root.errorText = "Logos bridge not available (run inside logos-app)"
|
||||
root.errorText = "Logos bridge not available (run inside logos-basecamp)"
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
+19
-19
@@ -25,9 +25,9 @@ A comprehensive guide to creating, building, testing, packaging, and distributin
|
||||
- [4.1 The lgpm CLI](#41-the-lgpm-cli)
|
||||
- [4.2 Installing from Local Files](#42-installing-from-local-files)
|
||||
- [4.3 Installing from a Registry](#43-installing-from-a-registry)
|
||||
- [Part 5: Running in the Logos App](#part-5-running-in-the-logos-app)
|
||||
- [5.1 Building logos-app](#51-building-logos-app)
|
||||
- [5.2 Module Types in logos-app](#52-module-types-in-logos-app)
|
||||
- [Part 5: Running in logos-basecamp](#part-5-running-in-logos-basecamp)
|
||||
- [5.1 Building logos-basecamp](#51-building-logos-basecamp)
|
||||
- [5.2 Module Types in logos-basecamp](#52-module-types-in-logos-basecamp)
|
||||
- [5.3 Development Mode](#53-development-mode)
|
||||
- [Part 6: Inter-Module Communication](#part-6-inter-module-communication)
|
||||
- [6.1 The LogosAPI](#61-the-logosapi)
|
||||
@@ -52,7 +52,7 @@ The **Logos platform** is a modular application framework built in C++ on top of
|
||||
- **Process isolation** -- each module runs in its own host process (on desktop), communicating via Qt Remote Objects
|
||||
- **Cross-platform support** -- macOS (arm64, x86_64) and Linux (arm64, x86_64)
|
||||
- **A package format** (`.lgx`) for distributing modules with platform-specific variants
|
||||
- **A desktop application shell** (`logos-app`) with a sidebar, tabbed workspace, and plugin management UI
|
||||
- **A desktop application shell** (`logos-basecamp`) with a sidebar, tabbed workspace, and plugin management UI
|
||||
- **A CLI runtime** (`logoscore`) for running modules headlessly
|
||||
|
||||
## Architecture
|
||||
@@ -60,7 +60,7 @@ The **Logos platform** is a modular application framework built in C++ on top of
|
||||
```
|
||||
+---------------------------------------------------------------+
|
||||
| Application Layer |
|
||||
| logos-app (Desktop GUI) or logoscore (CLI Runtime) |
|
||||
| logos-basecamp (Desktop GUI) or logoscore (CLI Runtime) |
|
||||
+---------------------------------------------------------------+
|
||||
| | |
|
||||
v v v
|
||||
@@ -94,7 +94,7 @@ The **Logos platform** is a modular application framework built in C++ on top of
|
||||
| **logos-liblogos** | [logos-co/logos-liblogos](https://github.com/logos-co/logos-liblogos) | Core runtime (`logoscore`, `logos_host`, `liblogos_core`) |
|
||||
| **logos-package** | [logos-co/logos-package](https://github.com/logos-co/logos-package) | LGX package format library + `lgx` CLI |
|
||||
| **logos-package-manager-module** | [logos-co/logos-package-manager-module](https://github.com/logos-co/logos-package-manager-module) | Package manager module + `lgpm` CLI |
|
||||
| **logos-app** | [logos-co/logos-co/logos-app](https://github.com/logos-co/logos-app) | Desktop application shell |
|
||||
| **logos-basecamp** | [logos-co/logos-basecamp](https://github.com/logos-co/logos-basecamp) | Desktop application shell |
|
||||
|
||||
## Prerequisites
|
||||
|
||||
@@ -663,24 +663,24 @@ The package manager automatically:
|
||||
|
||||
---
|
||||
|
||||
## Part 5: Running in the Logos App
|
||||
## Part 5: Running in logos-basecamp
|
||||
|
||||
### 5.1 Building logos-app
|
||||
### 5.1 Building logos-basecamp
|
||||
|
||||
```bash
|
||||
# Build the full application
|
||||
nix build 'github:logos-co/logos-app#app' --out-link ./logos-app
|
||||
nix build 'github:logos-co/logos-basecamp#app' --out-link ./logos-basecamp
|
||||
|
||||
# Run it
|
||||
./logos-app/bin/logos-app
|
||||
./logos-basecamp/bin/logos-basecamp
|
||||
|
||||
# Or build platform-specific distributions:
|
||||
nix build 'github:logos-co/logos-app#bin-appimage' # Linux AppImage
|
||||
nix build 'github:logos-co/logos-app#bin-macos-app' # macOS .app bundle
|
||||
nix build 'github:logos-co/logos-app#bin-macos-dmg' # macOS DMG
|
||||
nix build 'github:logos-co/logos-basecamp#bin-appimage' # Linux AppImage
|
||||
nix build 'github:logos-co/logos-basecamp#bin-macos-app' # macOS .app bundle
|
||||
nix build 'github:logos-co/logos-basecamp#bin-macos-dmg' # macOS DMG
|
||||
```
|
||||
|
||||
### 5.2 Module Types in logos-app
|
||||
### 5.2 Module Types in logos-basecamp
|
||||
|
||||
The application supports three types of modules:
|
||||
|
||||
@@ -725,7 +725,7 @@ For rapid iteration on QML UI modules, use the development mode launcher:
|
||||
|
||||
```bash
|
||||
# Build once
|
||||
nix build 'github:logos-co/logos-app'
|
||||
nix build 'github:logos-co/logos-basecamp'
|
||||
|
||||
# Run with live QML reloading (edits to .qml files take effect immediately)
|
||||
./run-dev.sh
|
||||
@@ -992,7 +992,7 @@ Or in `metadata.json`:
|
||||
}
|
||||
```
|
||||
|
||||
When your module is installed via `lgpm`, its dependencies are automatically resolved and installed first. When loaded via `logos-app`, core module dependencies are loaded before your module.
|
||||
When your module is installed via `lgpm`, its dependencies are automatically resolved and installed first. When loaded via `logos-basecamp`, core module dependencies are loaded before your module.
|
||||
|
||||
---
|
||||
|
||||
@@ -1006,7 +1006,7 @@ When your module is installed via `lgpm`, its dependencies are automatically res
|
||||
| [logos-liblogos](https://github.com/logos-co/logos-liblogos) | Core runtime | `logoscore` (CLI), `logos_host`, `liblogos_core` |
|
||||
| [logos-package](https://github.com/logos-co/logos-package) | Package format | `lgx` (CLI), `liblgx` (library) |
|
||||
| [logos-package-manager-module](https://github.com/logos-co/logos-package-manager-module) | Package management | `lgpm` (CLI), `package_manager_plugin` |
|
||||
| [logos-app](https://github.com/logos-co/logos-app) | Desktop app shell | `LogosApp` (GUI), MDI workspace, plugin loader |
|
||||
| [logos-basecamp](https://github.com/logos-co/logos-basecamp) | Desktop app shell | `LogosApp` (GUI), MDI workspace, plugin loader |
|
||||
|
||||
## Reference: CLI Tools Summary
|
||||
|
||||
@@ -1073,7 +1073,7 @@ experimental-features = nix-command flakes
|
||||
|
||||
### Module loads but LogosAPI is not available
|
||||
|
||||
This happens when running a module outside the full Logos runtime (e.g., in the module viewer). The `LogosAPI` is only available when the module is loaded by `logoscore` or `logos-app`.
|
||||
This happens when running a module outside the full Logos runtime (e.g., in the module viewer). The `LogosAPI` is only available when the module is loaded by `logoscore` or `logos-basecamp`.
|
||||
|
||||
### Build fails finding Qt
|
||||
|
||||
@@ -1084,7 +1084,7 @@ nix develop # Enter dev shell with all dependencies
|
||||
cmake -B build -GNinja && cmake --build build
|
||||
```
|
||||
|
||||
### Module not discovered by logos-app
|
||||
### Module not discovered by logos-basecamp
|
||||
|
||||
Check that:
|
||||
1. The module binary is in the correct directory (modules dir for core, plugins dir for UI)
|
||||
|
||||
+18
-18
@@ -9,7 +9,7 @@ This is Part 2 of the Logos module tutorial series. In [Part 1](tutorial-wrappin
|
||||
- How QML UI plugins work in the Logos platform
|
||||
- The `logos.callModule()` bridge that connects QML to core modules
|
||||
- The project structure and metadata for a QML plugin
|
||||
- How to build, install, and run your UI inside `logos-app`
|
||||
- How to build, install, and run your UI inside `logos-basecamp`
|
||||
|
||||
**Prerequisites:**
|
||||
|
||||
@@ -33,7 +33,7 @@ Before writing code, let's understand the architecture:
|
||||
| loaded by | loaded by
|
||||
v v
|
||||
+---------------------------------------------------------------+
|
||||
| logos-app |
|
||||
| logos-basecamp |
|
||||
| QML sandbox engine | logos_host process |
|
||||
+---------------------------------------------------------------+
|
||||
```
|
||||
@@ -69,13 +69,13 @@ mkdir icons
|
||||
|
||||
### 1.2 Add an icon (optional)
|
||||
|
||||
Place a PNG icon at `icons/calc.png`. This appears in the `logos-app` sidebar. If you don't have one, the app will use a default icon.
|
||||
Place a PNG icon at `icons/calc.png`. This appears in the `logos-basecamp` sidebar. If you don't have one, the app will use a default icon.
|
||||
|
||||
---
|
||||
|
||||
## Step 2: Write `metadata.json`
|
||||
|
||||
This tells `logos-app` what your plugin is and how to load it.
|
||||
This tells `logos-basecamp` what your plugin is and how to load it.
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -101,7 +101,7 @@ This tells `logos-app` what your plugin is and how to load it.
|
||||
| `type` | Must be `"ui_qml"` for QML UI plugins |
|
||||
| `pluginType` | Must be `"qml"` |
|
||||
| `main` | Entry point QML file — always `"Main.qml"` |
|
||||
| `dependencies` | Core modules this UI needs. `logos-app` loads these before your UI. |
|
||||
| `dependencies` | Core modules this UI needs. `logos-basecamp` loads these before your UI. |
|
||||
| `category` | Groups plugins in the sidebar (e.g., `"tools"`, `"misc"`) |
|
||||
| `icon` | Path to the sidebar icon, relative to the plugin directory |
|
||||
|
||||
@@ -186,7 +186,7 @@ This is the most important part — the function that calls your core module. Ad
|
||||
// The logos object is injected by the host at runtime.
|
||||
// It won't exist if you open Main.qml in a standalone QML viewer.
|
||||
if (typeof logos === "undefined" || !logos.callModule) {
|
||||
root.errorText = "Logos bridge not available (run inside logos-app)"
|
||||
root.errorText = "Logos bridge not available (run inside logos-basecamp)"
|
||||
return
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ logos.callModule(moduleName, methodName, argsArray)
|
||||
└── Module name from metadata.json (e.g., "calc_module")
|
||||
```
|
||||
|
||||
The call is synchronous from QML's perspective. Under the hood, `logos-app` routes it via IPC to the `logos_host` process running `calc_module`, which calls `CalcModulePlugin::add()`, which calls `calc_add()` from libcalc. The result comes back through the same chain.
|
||||
The call is synchronous from QML's perspective. Under the hood, `logos-basecamp` routes it via IPC to the `logos_host` process running `calc_module`, which calls `CalcModulePlugin::add()`, which calls `calc_add()` from libcalc. The result comes back through the same chain.
|
||||
|
||||
### 3.3 The complete file
|
||||
|
||||
@@ -464,7 +464,7 @@ Item {
|
||||
root.result = ""
|
||||
|
||||
if (typeof logos === "undefined" || !logos.callModule) {
|
||||
root.errorText = "Logos bridge not available (run inside logos-app)"
|
||||
root.errorText = "Logos bridge not available (run inside logos-basecamp)"
|
||||
return
|
||||
}
|
||||
|
||||
@@ -606,12 +606,12 @@ That's it. A QML plugin is just its source files packaged for installation.
|
||||
|
||||
---
|
||||
|
||||
## Step 6: Run in `logos-app`
|
||||
## Step 6: Run in `logos-basecamp`
|
||||
|
||||
### 6.1 Build `logos-app`
|
||||
### 6.1 Build `logos-basecamp`
|
||||
|
||||
```bash
|
||||
nix build 'github:logos-co/logos-app#app' --out-link ./logos-app
|
||||
nix build 'github:logos-co/logos-basecamp#app' --out-link ./logos-basecamp
|
||||
```
|
||||
|
||||
### 6.2 Set up the modules directory
|
||||
@@ -637,14 +637,14 @@ mkdir -p ui-plugins
|
||||
### 6.3 Launch
|
||||
|
||||
```bash
|
||||
./logos-app/bin/logos-app \
|
||||
./logos-basecamp/bin/logos-basecamp \
|
||||
--modules-dir ./modules \
|
||||
--ui-plugins-dir ./ui-plugins
|
||||
```
|
||||
|
||||
You should see:
|
||||
|
||||
1. The `logos-app` window opens with a sidebar
|
||||
1. The `logos-basecamp` window opens with a sidebar
|
||||
2. "Calculator UI" appears as a tab (with your icon if you provided one)
|
||||
3. Click the tab to see your QML interface
|
||||
4. Enter numbers and click **Add**, **Multiply**, **Factorial**, or **Fibonacci**
|
||||
@@ -658,7 +658,7 @@ Here's the full chain when you enter `3` and `5` and click **Add**:
|
||||
1. QML: Button.onClicked → callTwoOp("add", "3", "5")
|
||||
2. QML: callTwoOp() → callModule("add", [3, 5])
|
||||
3. QML: logos.callModule("calc_module", "add", [3, 5])
|
||||
4. logos-app: Routes call via IPC to logos_host process
|
||||
4. logos-basecamp: Routes call via IPC to logos_host process
|
||||
5. logos_host: QMetaObject::invokeMethod(plugin, "add", 3, 5)
|
||||
6. C++: CalcModulePlugin::add(3, 5) → calc_add(3, 5)
|
||||
7. C: Returns 8
|
||||
@@ -676,7 +676,7 @@ For rapid iteration, use development mode. This watches your QML source files an
|
||||
|
||||
```bash
|
||||
# Point QML_UI at your source directory
|
||||
QML_UI=$(pwd) ./logos-app/bin/logos-app \
|
||||
QML_UI=$(pwd) ./logos-basecamp/bin/logos-basecamp \
|
||||
--modules-dir ./modules \
|
||||
--ui-plugins-dir ./ui-plugins
|
||||
```
|
||||
@@ -685,7 +685,7 @@ Edit `Main.qml`, save, and the UI updates without rebuilding.
|
||||
|
||||
### 7.2 Debugging
|
||||
|
||||
Since QML plugins are sandboxed, you can't use `console.log()` to write to the terminal in production. But in development mode, `console.log()` output appears in the terminal where you launched `logos-app`.
|
||||
Since QML plugins are sandboxed, you can't use `console.log()` to write to the terminal in production. But in development mode, `console.log()` output appears in the terminal where you launched `logos-basecamp`.
|
||||
|
||||
Add debug logging to your bridge function:
|
||||
|
||||
@@ -699,7 +699,7 @@ function callModule(method, args) {
|
||||
}
|
||||
```
|
||||
|
||||
### 7.3 Testing without `logos-app`
|
||||
### 7.3 Testing without `logos-basecamp`
|
||||
|
||||
You can open `Main.qml` in any QML viewer (e.g., `qml` from Qt) to test the layout. The `logos` bridge won't be available, so clicking buttons will show "Logos bridge not available" — but you can verify the layout and styling work correctly.
|
||||
|
||||
@@ -732,7 +732,7 @@ nix build 'github:logos-co/logos-package-manager-module#cli' --out-link ./pm
|
||||
./pm/bin/lgpm --modules-dir ./ui-plugins install --file calc_ui.lgx
|
||||
```
|
||||
|
||||
> **Local vs portable:** Local builds of `logos-app` (via `nix build '.#app'`) expect **local** `.lgx` packages. Portable builds (via `nix build '.#bin-bundle-dir'`, `.#bin-appimage`, or `.#bin-macos-app`) expect **portable** `.lgx` packages. See the [logos-app README](https://github.com/logos-co/logos-app/blob/master/README.md) for details.
|
||||
> **Local vs portable:** Local builds of `logos-basecamp` (via `nix build '.#app'`) expect **local** `.lgx` packages. Portable builds (via `nix build '.#bin-bundle-dir'`, `.#bin-appimage`, or `.#bin-macos-app`) expect **portable** `.lgx` packages. See the [logos-basecamp README](https://github.com/logos-co/logos-basecamp/blob/master/README.md) for details.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -729,7 +729,7 @@ nix build 'github:logos-co/logos-package-manager-module#cli' --out-link ./pm
|
||||
./pm/bin/lgpm --modules-dir ./modules install --file calc_module.lgx
|
||||
```
|
||||
|
||||
> **Note:** Local builds of `logoscore` / `logos-app` (via `nix build`) expect **local** `.lgx` packages. Portable builds (via `nix build '.#bin-bundle-dir'`, `.#bin-appimage`, or `.#bin-macos-app`) expect **portable** `.lgx` packages. See the [logos-app README](https://github.com/logos-co/logos-app/blob/master/README.md) for details.
|
||||
> **Note:** Local builds of `logoscore` / `logos-basecamp` (via `nix build`) expect **local** `.lgx` packages. Portable builds (via `nix build '.#bin-bundle-dir'`, `.#bin-appimage`, or `.#bin-macos-app`) expect **portable** `.lgx` packages. See the [logos-basecamp README](https://github.com/logos-co/logos-basecamp/blob/master/README.md) for details.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user