visiosoft/integer-field_type
An integer field type addon for Visiosoft Streams that adds whole-number fields to Laravel-powered CMS entries, forms, and modules. Configure and store numeric values with a simple, lightweight integration designed for Streams Platform projects.
What this package actually is. visiosoft/integer-field_type is an addon for the PyroCMS Streams Platform (anomaly/streams-platform), the addon framework underneath Visiosoft's OpenClassify classifieds product. It contributes an IntegerFieldType class — a FieldType subclass that declares a form input view, a validation/persistence hint (integer), and little else. Expect the entire code surface to be one or two classes plus a Blade partial rendering <input type="number">. It is a leaf node in the Streams addon graph, not a standalone Laravel library.
Architecture fit. Fit is binary, and narrow:
| Context | Fit |
|---|---|
| OpenClassify / PyroCMS 3.x on Streams | Native — this is the intended host |
| Custom app already using Streams field types | Good — drop-in field type |
| Vanilla Laravel (5.x–11.x) | None — the addon has no meaning without Streams' FieldType contract and addon registrar |
| Anything greenfield | None — reimplement in an afternoon |
The architectural value is therefore informational: it documents the canonical shape of a Streams field type and the conventions (service provider registration, namespace, view namespace, column type declaration) we would mirror if we were building our own field types into OpenClassify.
Integration feasibility. Composer-only: composer require visiosoft/integer-field_type. Feasibility hinges on resolution rather than on code quality — the package's composer.json will carry a PHP 7.x constraint and a Streams ~1.x constraint with no modern equivalent. On PHP 8.1+ / Laravel 9+, expect composer update to fail or to force a downgrade cascade across the Streams dependency tree. There is no CI badge, no test directory evidence, and the Packagist name (visiosoft/...) diverges from the repository owner (openclassify/...), so we must confirm the published artifact matches the repo before pinning.
Technical risk. Rate as high probability, low blast radius:
Key questions to resolve before any decision.
integer field — min/max, step, nullable handling, formatted display, filtering/sorting in the Streams query layer? If the answer is "nothing," its only value is as a reference implementation.php and anomaly/streams-platform constraints in composer.json, and does the release tag resolve against our locked Streams version?visiosoft/integer-field_type byte-identical to openclassify/integer-field_type at the 2020 tag? Verify by commit hash.PHP_INT_MAX on 32-bit and 64-bit targets? These are the classic failure points of naive integer field types.Stack fit. Only pursue if the target application is PyroCMS 3.x / OpenClassify on the Streams Platform with a PHP 7.x runtime. In that case it slots in as a registered addon with no schema migration of its own — the field type is selected per Stream field and the column type is handled by Streams' field migration. In any other stack, treat it as a reference pattern, not a dependency, and cite it in the design doc for our own equivalent.
Migration path. Two viable routes, ranked:
composer require visiosoft/integer-field_type:^1.0 with an exact lock, then verify resolution in a throwaway branch before it touches the mainline. Accept that any future Streams upgrade may require us to fork in place.Do not fork to a new public package. There is no audience at 0 stars, and publishing creates a maintenance obligation we will not staff.
Compatibility. Confirm three axes explicitly: PHP version (expect 7.1–7.4), Streams Platform major (expect ~1.x), and Laravel major implied by that Streams release (expect 5.5–6.x). If our runtime has moved past any of these, option 1 is the only route — a composer require on an unsupported combination will either fail or silently pull an incompatible Streams tree.
Sequencing.
composer.json constraints. (1 hour)Maintenance. Effectively zero upstream maintenance, so all maintenance transfers to us at adoption. Positively, the code is small and stable — integer fields are a solved problem, so the absence of commits is closer to "finished" than "rotten." Budget a recurring line item only for the fork: keep it in our addon repo, pin nothing externally, and revisit if the host Streams major changes.
Support. No upstream support channel. Issue and PR response is unlikely. Internal support burden is low but non-zero: any developer who sees integer in composer.json will assume an external owner exists. Mitigate by annotating the dependency in our ADR and README so nobody wastes a cycle filing upstream.
Scaling. Runtime cost is negligible — a field type is resolved during form/render and persistence, not on hot paths, and adds no queries, no middleware, and no boot-time work beyond the addon registrar. The scaling risk is organisational, not technical: addon count in a Streams estate grows superlinearly in upgrade cost, and every unmaintained addon raises the price of the eventual framework upgrade. This package makes a Streams upgrade marginally harder, never an application slower.
Failure modes. Ranked by likelihood:
require.FieldType abstract or the field migration API; our vendored copy breaks at boot rather than at render, which is the good case.0, silent truncation on overflow, locale-decimal input rejected, negative values accepted where the domain forbids them. These fail quietly in production data, which is the expensive case.Ramp-up. Low for any Laravel developer: the class is short and idiomatic. The actual learning curve is Streams addon conventions — service provider boot order, view namespaces, field type registration, and the difference between field type and field migration. Estimate one to two days for a competent Laravel engineer to be productive in this addon space, and under a week to be confident enough to author and maintain our own field types. That ramp-up is a reusable team asset independent of whether we adopt this specific package, which is the strongest argument for running the evaluation even at a score of 0 stars.
How can I help you explore Laravel packages today?