Download the PHP package citomni/installer without Composer

On this page you can find all versions of the php package citomni/installer. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package installer

CitOmni Installer

Official scaffold lifecycle tool for CitOmni applications.

citomni/installer is the package-owned scaffold materializer for the CitOmni ecosystem. It discovers scaffold manifests from installed Composer packages, renders package-owned scaffold files, writes the few files that must physically exist in the application layer, and tracks their state so future repairs and scaffold updates can be handled safely.

The package is deliberately narrow. It is not a framework runtime, not a web updater, not a Composer replacement, not a historical restore tool, and not a merge engine with a heroic cape and a questionable threat model.

In practical terms, citomni/installer lets CitOmni keep citomni/app-skeleton neutral and almost empty while allowing packages such as citomni/http and citomni/cli to own the runtime-near entrypoints and scaffold files that belong to them.


Highlights


What this package is

citomni/installer is the scaffold materialization and lifecycle package for CitOmni.

It handles the few package-owned files that cannot stay in /vendor/ because they must exist in the application tree to function. Typical examples are an HTTP front controller such as public/index.php or a CLI entrypoint such as bin/citomni.

The package works from installed Composer packages. A package that owns scaffold declares a manifest, and citomni/installer uses that manifest to plan and apply safe changes in the application layer.

This keeps the ownership model mechanical and easy to reason about:

No smoke, no mirrors, and preferably no wizard hat in production.


What this package provides

Scaffold discovery

Scaffold materialization

Scaffold lifecycle commands

Post-MVP may add diff for comparing local files against the current rendered upstream version.

Integration output


What this package owns

citomni/installer owns the lifecycle mechanics around package-owned scaffold.

That includes:

This package owns the mechanism, not the application. That distinction is the whole point.


What this package does not own

citomni/installer is intentionally not a general application generator or updater.

It does not own:

Those responsibilities belong elsewhere. The installer stays small because that is where most of its safety comes from.


Relationship to other CitOmni packages

CitOmni separates project creation, dependency management, runtime packages, scaffold materialization, and project tooling into distinct layers.

Within that model:

  1. citomni/app-skeleton provides the neutral application container.
  2. Composer installs and updates packages.
  3. Runtime packages such as citomni/http and citomni/cli own their own scaffold stubs.
  4. citomni/installer materializes package-owned scaffold into the application layer.
  5. External project tooling may orchestrate richer workflows around project creation, repository setup, secrets, deployment, and registration.

A minimal HTTP application can therefore start from a neutral skeleton, require citomni/http, and then materialize only the HTTP-owned files needed by that mode.

A minimal CLI application can do the same with citomni/cli without dragging a public/ directory around like ceremonial luggage.


Scaffold ownership model

Package-owned scaffold should live in the package that owns the runtime function.

Examples:

Those stubs are the package-owned reference versions. The materialized files in the app are app-local runtime artifacts derived from those stubs.

Examples:

This duplication is intentional. The files have different lifecycles:

Composer remains the source of truth for which upstream scaffold version is available.


Application skeleton model

citomni/app-skeleton should stay neutral and mode-free.

It may provide the application container and base structure, such as:

It should not need to include complete HTTP or CLI runtime entrypoints as permanent root-owned files.

Examples:

After composer create-project, root-level files are app-owned. citomni/installer must not rewrite the app README, .gitignore, composer.json, or composer.lock during normal operation.


Requirements

citomni/installer is intentionally independent of citomni/cli and citomni/http. It must be able to run before either runtime package has been installed in the application.

citomni/kernel is not required for the installer CLI bootstrap unless a future implementation explicitly chooses that dependency.


Installation

In a new CitOmni application, citomni/installer is normally installed through citomni/app-skeleton.

For an existing application, install the package explicitly:

The package provides its own CLI entrypoint:

No CitOmni provider registration is required for MVP usage. The installer is a CLI lifecycle tool, not a request-time runtime dependency.


Typical workflows

Add HTTP support

If the installed scaffold uses placeholders such as {{ CITOMNI_ENVIRONMENT }}, provide them either through config/citomni_installer.php or through repeated --placeholder=KEY=VALUE options before running install.

Add CLI support

Check scaffold status

Update framework packages and sync scaffold

Repair missing files

repair is not historical restore. It recreates missing scaffold files from the currently installed package version.


Composer scripts

Applications may expose shorter commands through root-level Composer scripts.

Example:

Usage:

These scripts belong to the application. citomni/installer must not rewrite composer.json to add or modify them.

Avoid wiring write-capable commands such as sync into automatic Composer hooks. Read-only hints are friendly. Surprise file mutation after dependency update is how a tool earns side-eye.


Commands

doctor

Runs read-only validation of the application environment.

Typical checks include:

Examples:

status

Shows scaffold status without changing files.

It reports whether known scaffold targets are missing, clean, locally modified, affected by upstream stub changes, affected by placeholder changes, or blocked from automatic sync.

Examples:

install

Materializes scaffold for a newly installed package or runtime mode.

Default behavior:

Example:

Forced replacement:

--force allows existing scaffold targets to be overwritten, but asks for interactive confirmation before writing. --force=yes confirms the overwrite without prompting and is intended for scripts or explicitly confirmed manual runs. Forced replacements create backups before writing.

repair

Recreates missing scaffold files from the currently installed package stubs.

Default behavior:

Example:

sync

Updates managed scaffold files safely.

Default behavior:

Example:

Forced sync:

--force replaces the existing target after interactive confirmation and writes a backup first. --force=yes performs the same forced replacement without prompting. A positional target limits the run to that app-relative file; without a target, the command applies to the selected package scope.

Conflict example:

Post-MVP may add a diff command for comparing local app files against the current rendered upstream scaffold.


Package manifest convention

Packages that provide scaffold should declare a scaffold manifest.

Composer extra is the primary discovery mechanism:

If no explicit value exists, the installer may fall back to:

If both exist and point to different paths, the Composer extra value wins.

The manifest's scaffold source base is normally install/scaffold/.

Example manifest:

version is the manifest schema version, not the package semver.


Manifest fields

target

Relative path in the application where the scaffold file should be materialized.

Targets must be safe relative app paths. Absolute paths, parent traversal, invalid separators, and paths outside the application root must be rejected.

source

Relative path inside the package root pointing to the scaffold stub.

Sources must stay inside the package root. The installer must not follow a manifest into writing or reading arbitrary system files. Manifests are configuration, not a treasure map.

type

Diagnostic metadata describing what the file is.

Examples:

type may be used for output, grouping, logging, JSON responses, and future read-only UI.

policy

The write behavior contract.

Supported MVP policies:

Write behavior is controlled by policy, not by type.


File policies

managed

Used for small framework-near files where the package owner may continue to ship updates.

Examples:

Rules:

create-only

Used for files that should normally be created once and then left to the application.

Examples:

Rules:


Placeholder rendering

Scaffold stubs may use simple placeholders.

Examples:

Whitespace immediately inside the braces is ignored, but placeholder names themselves must still use uppercase keys matching [A-Z][A-Z0-9_]*.

MVP placeholder rules:

When scaffold placeholders are needed, the application-level placeholder config should live here:

Example:

MVP placeholder priority:

  1. CLI options.
  2. config/citomni_installer.php.

Future versions may add Composer metadata, existing CitOmni config, or explicit package defaults.

Example:

APP_NAMESPACE should be explicit when Composer autoload configuration is ambiguous.


State and checksums

Installer state is stored in the application, not in the installer package, runtime package, or /vendor/.

Recommended location:

The state file stores enough information to determine whether a managed file is clean, locally modified, affected by upstream stub changes, or affected by placeholder changes.

For managed files, the installer uses two checksum concepts.

stub_checksum

Checksum of the raw scaffold stub before placeholder rendering.

Purpose:

rendered_checksum

Checksum of the rendered file that was written to the application.

Purpose:

Package semver is useful metadata, but it must not drive sync decisions alone. A package can change without scaffold drift, and a dev checkout can change scaffold without a meaningful semver change. Bytes beat vibes.


Write safety model

Default behavior is conservative.

Situation Default behavior
Target is missing Create file
Target exists and is unknown Stop or write .new
Target matches previous rendered_checksum Update if policy is managed
Target is locally modified Do not overwrite
Target is create-only and exists Do not touch unless explicitly forced
Target is outside app root Fail
Source is missing in package Fail
Manifest is invalid Fail
State is unknown or unsafe Fail without writing

Plain --force asks for confirmation before destructive writes. --force=yes confirms the same destructive write without prompting. Both modes create backups before replacing existing files.

When forced replacement overwrites a file, the installer must create a backup first.

Recommended backup location:

Writes should be atomic where practical. Scaffold files, .new files, backups, and state should be written through a temporary file in the same directory and then renamed into place.


Exit codes

CLI exit codes should be stable so project tooling, CI, and deploy scripts can make deterministic decisions.

Exit codes:

Code Meaning
0 OK, no problems
1 General error
2 Invalid usage or invalid arguments
3 Drift found, no conflict
4 Conflict or local changes requiring manual action
5 Unsafe state or migration required
6 IO or permission error

Examples:


JSON output

All MVP commands support JSON output.

Example:

JSON output should be stable enough for project tooling and automation. It includes package name, type, policy, target, status, reason, and action values that tooling can use to infer whether a file can be synced without conflict.

Interactive confirmation is not available in JSON mode. When a forced overwrite is required, automation must use --force=yes; plain --force --format=json returns an invalid-usage response instead of prompting.

Status, reason, and error values should distinguish at least:

Human output can be friendly. JSON output should be boring. Boring is a feature when another program has to parse it.


Tooling integration

External project tooling can use citomni/installer as the scaffold engine in a larger app-creation workflow.

A typical project-tooling flow may look like this:

Project tooling should not need to know the internal contents of public/index.php, bin/citomni, HTTP config stubs, or CLI config stubs. It should ask the installer for status or ask the installer to materialize the package-owned scaffold.


Legacy applications

Legacy migration is not an MVP responsibility, but the state model should allow a future adopt command.

A possible future flow:

Important principles for legacy adoption:

Existing applications deserve caution. They may contain history, intentional edits, and the occasional fossil from a heroic Friday deploy.


HTTP UI

HTTP UI is not part of the MVP.

A future UI may be read-only and show status, diffs, and recommended commands. It should not write to the codebase from a web request, run Composer update, mutate /vendor/, or act as a web updater.

If remote write behavior is ever needed, it should be handled through an out-of-band runner, deploy hook, cron job, or explicit CLI process rather than direct HTTP request execution.


Runtime and architectural model

citomni/installer follows CitOmni's architectural discipline without requiring a full CitOmni runtime.

Recommended internal structure:

There is no repository layer in MVP because there is no SQL.

There is no HTTP controller in MVP because HTTP UI is not part of the first version.

There is no service-map singleton dependency in MVP because the installer must work before a CitOmni app runtime is bootable.


Performance notes

Composer example:

Then run:


Error handling philosophy

Fail fast.

citomni/installer should reject unsafe paths, unknown manifest versions, invalid state, missing sources, unknown placeholders, and ambiguous writes before touching the application tree.

When a file is locally modified, the correct default is not to be clever. The correct default is to stop, write .new where appropriate, and make the human decision obvious.

Silent fallback behavior feels nice until it quietly edits the wrong file. That is not the kind of magic CitOmni is trying to collect.


Contributing


Coding & Documentation Conventions

All CitOmni projects follow the shared conventions documented here: CitOmni Coding & Documentation Conventions


License

CitOmni Installer is open-source under the MIT License. See LICENSE.

Trademark notice: "CitOmni" and the CitOmni logo are trademarks of Lars Grove Mortensen. Usage of the name or logo must follow the policy in NOTICE. Do not imply endorsement or affiliation without prior written permission.


Trademarks

"CitOmni" and the CitOmni logo are trademarks of Lars Grove Mortensen. You may make factual references to "CitOmni", but do not modify the marks, create confusingly similar logos, or imply sponsorship, endorsement, or affiliation without prior written permission. Do not register or use "citomni" or confusingly similar terms in company names, domains, social handles, or top-level vendor/package names. For details, see NOTICE.


Author

Developed by Lars Grove Mortensen (c) 2012-present.


CitOmni - low overhead, high performance, ready for anything.


All versions of installer with dependencies

PHP Build Version
Package Version
Requires php Version ^8.2
citomni/kernel Version ^1.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package citomni/installer contains the following files

Loading the files please wait ...