Skip to content

Repository files navigation

Ramiris

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.

Build

cmake -S . -B cmake-build-debug -DCMAKE_BUILD_TYPE=Debug
cmake --build cmake-build-debug --parallel
ctest --test-dir cmake-build-debug --output-on-failure

The current development toolchain expects a C++26-capable compiler. Static reflection is intentionally not part of the current plugin contract.

License

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.

MVP Usage

List discovered plugins:

./cmake-build-debug/bin/ramiris plugin list

Generate the example project:

./cmake-build-debug/bin/ramiris init \
  --config examples/cpp-console.ramiris.toml \
  --path cmake-build-debug/generated/hello-ramiris

Ramiris 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 \
  --overwrite

Build 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_ramiris

Plugin Roots

Ramiris 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.toml

Installed 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-plugins

Plugin 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 Commands

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 = 26

The 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:cmake

Command 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=26

CLI 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.

About

Console and config project generator, based on plugins

Resources

Contributing

Stars

16 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages