Ramiris is a plugin-driven project generator. The core does not generate project
content by itself: it discovers plugins, reads config/CLI commands, dispatches
those commands to plugins, and writes the files registered in project_context.
cmake -S . -B cmake-build-debug -DCMAKE_BUILD_TYPE=Debug
cmake --build cmake-build-debug --parallel
ctest --test-dir cmake-build-debug --output-on-failureThe current development toolchain expects a C++26-capable compiler. Static reflection is intentionally not part of the current plugin contract.
Ramiris is dual-licensed:
- AGPLv3 for open-source and AGPL-compliant use. See
LICENSE. - A commercial license for proprietary use outside AGPL terms. See
COMMERCIAL.md.
Contributions require the Ramiris Contributor Assignment Agreement. See
CONTRIBUTING.md.
List discovered plugins:
./cmake-build-debug/bin/ramiris plugin listGenerate the example project:
./cmake-build-debug/bin/ramiris init \
--config examples/cpp-console.ramiris.toml \
--path cmake-build-debug/generated/hello-ramirisRamiris does not overwrite generated files by default. Use --overwrite only
when replacing existing generated output is intentional:
./cmake-build-debug/bin/ramiris init \
--config examples/cpp-console.ramiris.toml \
--path cmake-build-debug/generated/hello-ramiris \
--overwriteBuild the generated project:
cmake -S cmake-build-debug/generated/hello-ramiris \
-B cmake-build-debug/generated/hello-ramiris-build
cmake --build cmake-build-debug/generated/hello-ramiris-build --parallel
./cmake-build-debug/generated/hello-ramiris-build/hello_ramirisRamiris scans these roots by default:
- built-in plugins from the current build tree
- installed plugins under the install lib directory
- Linux/macOS:
~/.local/share/ramiris/plugins - Windows:
%LOCALAPPDATA%/Ramiris/plugins
Additional trusted roots can be passed with --plugins PATH.
Project-local plugins under ./plugins are not scanned by default. Use
--allow-project-plugins when the current project is trusted and those plugins
are expected to execute as native code.
Plugin discovery reads .ramiris-plugin.toml manifests first. Ramiris does not
load a plugin's native library while listing plugins; the library is loaded only
when a selected plugin command executes.
Install a trusted plugin from a manifest or a directory containing one manifest:
./cmake-build-debug/bin/ramiris plugin install ./my-plugin/my_plugin.ramiris-plugin.tomlInstalled plugins go to the user plugin root by default:
- Linux/macOS:
~/.local/share/ramiris/plugins - Windows:
%LOCALAPPDATA%/Ramiris/plugins
Use --root PATH to test installs in a temporary directory:
./cmake-build-debug/bin/ramiris plugin install ./my-plugin/my_plugin.ramiris-plugin.toml \
--root /tmp/ramiris-plugins
./cmake-build-debug/bin/ramiris plugin list --installed --root /tmp/ramiris-plugins
./cmake-build-debug/bin/ramiris plugin remove generator/my-plugin --root /tmp/ramiris-pluginsPlugin install validates the manifest and then loads the native library once to
verify that its exported descriptor matches the manifest. Reinstalling over an
existing plugin requires --overwrite.
Config files are TOML. Generation is controlled by ordered plugin commands:
name = "hello-ramiris"
version = "0.1.0"
language = "cpp"
build = "cmake"
type = "console-app"
overwrite = false
template_root = "templates"
[[commands]]
category = "language"
plugin = "cpp"
[[commands]]
category = "project-type"
plugin = "console-app"
[commands.args]
message = "Hello from Ramiris MVP"
[[commands]]
category = "build-system"
plugin = "cmake"
[commands.args]
standard = 26The CLI can replace the config command list:
./cmake-build-debug/bin/ramiris init \
--config examples/cpp-console.ramiris.toml \
--command language:cpp \
--command project-type:console-app \
--command build-system:cmakeCommand arguments can be overridden from CLI:
./cmake-build-debug/bin/ramiris init \
--config examples/cpp-console.ramiris.toml \
--arg project-type.console-app.message="Hello from CLI" \
--arg build-system.cmake.standard=26CLI arg values are parsed as boolean, integer, or string and then checked
against the target plugin argument schema before any plugin is executed.
Missing command arguments use non-empty defaults declared by the plugin schema.
Plugins declare dependencies by fully qualified plugin id: category/name.
For example, the built-in CMake plugin depends on
project-type/console-app, not just console-app.
Template-backed files can be generated by plugins through project_context.
Templates are searched under template_root/{language}, template_root/common,
template_root, then by the path passed by the plugin. The current template
syntax supports variables, nested access, if blocks, and each loops.