symbiont/composer-syckdev

[Sy]mlink-pa[ck]age-[dev]elopment

Installs: 9

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Forks: 0

Type:composer-plugin

pkg:composer/symbiont/composer-syckdev

v1.0.5 2026-02-04 12:36 UTC

This package is auto-updated.

Last update: 2026-02-04 11:36:51 UTC


README

Syckdev (short for Symlink-package-development) is a Composer plugin that dramatically simplifies local package development workflows.

Tired of constantly running composer update after every small change in a local dependency?
Syckdev lets you activate / deactivate symlinked local versions of your packages with a few keystrokes — right from the terminal — without touching your composer.json.

Perfect for monorepo-style or multi-package development where you're actively working on several interdependent libraries at once.

[!IMPORTANT]
This project is work in progress — feedback and contributions are very welcome!

Features

  • Interactive terminal UI to toggle local dev versions on/off
  • Shows clearly which packages are using local code vs. installed versions
  • Supports aliased directory structures (when local folder ≠ Packagist name)
  • Displays dependency reasons (composer why-style)
  • No need to modify repositories or add path entries manually
  • Works globally — one installation for all your projects

Requirements

  • PHP ≥ 8.2
  • Composer ≥ 2.1

Installation

Global installation is recommended:

# Remove any old version first (if exists)
composer global remove symbiont/composer-syckdev

# Install latest version
composer global require symbiont/composer-syckdev

Make sure ~/.composer/vendor/bin (or equivalent) is in your $PATH.

Quick Setup

  1. Create a central directory where all your local packages live (e.g. ~/Development/syckdev-repo).
  2. Inside it, organize packages using the vendor/package pattern (or use aliases later).

    Example:

    ~/Development/syckdev-repo/
    ├── symbiont/
    │   ├── config/
    │   ├── dipendency/
    │   ├── dispatcher/
    │   └── support/
    │       ├── boot-trait/
    │       └── forward-call/
    └── other-vendor/
    └── some-lib/
    
  3. In every project where you want to use local overrides, create a .syckdev.json file at the root:

    {
      "path": "/home/youruser/Development/syckdev-repo",
      "packages": [
        "symbiont/dipendency",
        "symbiont/dispatcher"
      ],
      "alias": {
        "symbiont/support-boot-trait": "symbiont/support/boot-trait",
        "symbiont/support-forward-call": "symbiont/support/forward-call"
      }
    }
    
    • path — root folder containing your local packages
    • packages — (optional) packages to show by default in "required" mode
    • alias — maps Packagist-style names → real folder paths (useful when folder structure differs)

[!NOTE]
Future versions will auto-detect packages from the symlink directory using their composer.json name → no manual packages or alias needed!

Usage

Run any of these commands from your project root:

composer sd:status     # or just: composer sd

You'll enter an interactive terminal view:

Syckdev dev-main  ← project name + current branch
┌─────────┬───────────────────────────────┐
│ path    │ /home/user/syckdev-repo       │
│ package │ symbiont/composer-syckdev     │
│ mode    │ required                      │
└─────────┴───────────────────────────────┘

required mode
┌─────┬─────────────────────┬──────────┬───────────┬────────────┬─────────┬───────┬──────────────────────────────────────┐
│ nr  │ name                │ local    │ installed │ status     │ type    │ alias │ why                                  │
├─────┼─────────────────────┼──────────┼───────────┼────────────┼─────────┼───────┼──────────────────────────────────────┤
│ a:1 │ symbiont/config     │ 0a456228 │ v1.2.9 *  │ - inactive │ library │ -     │ symbiont/composer-syckdev (dev-main) │
│ a:2 │ symbiont/dipendency │ 8dd2595e │ v1.0.1 *  │ - inactive │ library │ -     │ symbiont/composer-syckdev (dev-main) │
└─────┴─────────────────────┴──────────┴───────────┴────────────┴─────────┴───────┴──────────────────────────────────────┘

q(uit)  all (show all packages)
a(ctivate):{nr}  d(eactivate):{nr}  i(nfo):{nr}
<enter option>:

Available Commands

KeyAction
qQuit
allSwitch to "all packages" mode
reqSwitch back to "required only" mode
a:5Activate package #5
d:3Deactivate package #3
i:2Show more info about package #2

After activation, status changes to + active and the command prefix flips from a:d:.

Column Reference

ColumnMeaning
nrPackage number for activation/deactivation
namePackage name (Packagist style)
localCommit / version currently present in your symlink folder
installedVersion Composer currently has installed
status- inactive or + active (using local symlink)
typecomposer.json"type" value
aliasReal folder path if aliased
whyWhy this package is present (like composer why <package>)

Coming Features

Planned improvements to make Syckdev even more powerful and convenient:

  • Automatic project-specific cloning
    One command to clone any currently used package from your project's vendor/ directory directly into the central symlink directory — organized per project.
    Example target structure:
    ~/Development/syckdev/.my-project-name/vendor/symbiont/config

  • Reset command
    A simple composer sd:reset (or similar) that deactivates all currently active symlinked packages at once, reverting everything to the Composer-installed (remote) versions.
    Ideal for quickly cleaning up before committing, deploying, or testing "production-like" behavior.

  • Web-based user interface
    An optional lightweight HTTP server (e.g. composer sd:serve) that opens a clean browser dashboard at http://localhost:some-port.
    View status, toggle packages on/off, see dependency graphs, and get detailed info — no more terminal-only interaction when you prefer a GUI.

These features are already on the roadmap — contributions and ideas are very welcome!

Running Tests

The test requires a composer .syckdev.json at the root of this project.

{
    "path": "/var/www-symlinks",
    "packages": [
        "symbiont/dipendency",
        "symbiont/dispatcher",
        "symbiont/config"
    ],
    "alias": {
        "symbiont/support-boot-trait": "symbiont/support/boot-trait",
        "symbiont/support-forward-call": "symbiont/support/forward-call"
    }
}

Then simply run

composer test

Contributing

Feel free to open issues or merge requests on GitLab.

Links

License

MIT License