Download the PHP package akqa/silverstripe-tumu without Composer

On this page you can find all versions of the php package akqa/silverstripe-tumu. 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 silverstripe-tumu

silverstripe-tumu

CI

A unique combination of foundational modules for Silverstripe websites.

🌟 Install

♻️ Why use tumu

Tumu is designed for a few purposes:

  1. To make our projects consistent and predictable as possible.
  2. Simplify upgrading between major platform versions.
  3. DRY - Don't Repeat Yourself.

By replacing direct composer requirements of things like cms and elemental and using tumu we can delegate some of the heavy lifting to a single source of truth and handle major version upgrades with a single dependency

πŸš€ Features Included

Project Setup

Ideal situation is your project specific composer.json reflects something as simple as

The dev dependencies are used for GrumPHP and our standard linting rules.

Front-end assets

For this we assume a default location of javascript, css and images of app/client. You can use themes if you wish but most of our sites use a single app directory. Under the app/client we usually structure it as

Tumu provides a ViteProvider trait which extracts our handling of importing Vite requirements (but not the running of the Vite process, you will need to update your environment to physically build or run the hot-reload server).

In your Page.ss template include the following <% include Vite %>. By default, this will handle the hot-reload and requirements for 2 entry points app/client/src/index.ts and app/client/src/index.css. To rename or change these entrypoints, use the API on ViteProvider

To include additional CSS or JavaScript files (such as print stylesheets), implement the getAdditionalRequirements() method:

The getAdditionalRequirements() method should return an array of asset paths relative to your Vite source directory. CSS files (.css or .scss) will be automatically included in the page requirements, while JavaScript files will be loaded as modules. This is useful for including print stylesheets, page-specific styles, or additional JavaScript modules.

Modulepreload for imported chunks

Vite's production HTML is typically a tiny inline module:

Any file listed in that entry's imports in manifest.json (for example a Registry chunk, or a shared vendor chunk) is only discovered after index.js downloads and parses β€” an extra round trip on the critical path.

ViteProvider emits <link rel="modulepreload"> for those JS imports (and for imports of any additional JS entries from getAdditionalRequirements()). CSS imports are unchanged: they still go through Requirements::css(). No project code is required beyond using <% include Vite %>.

If you render Includes/ViteRequirements yourself, pass ModulePreloads as well as JSModules:

React components (SSR)

Tumu can optionally server-render React "islands" into Silverstripe templates, then hydrate them with the same Vite client bundle. This is opt-in: client-only mount nodes keep working without it.

The approach is deliberately small. Silverstripe still owns the page. React renders named components (a banner, an accordion, a listing) rather than the whole site. PHP asks Node.js to renderToString a component from a Vite SSR bundle, wraps that HTML in a mount node, and the browser hydrates it.

Enable it

  1. Node.js must be on the PATH of the PHP process (DDEV's web container is fine; many PHP-only hosts are not).
  2. Build a Vite SSR entry that reads JSON from stdin and writes HTML to stdout (see below).
  3. Turn it on:

Or in YAML:

Optional env overrides: SS_REACT_SSR_ENTRY, SS_REACT_SSR_NODE, SS_REACT_SSR_TIMEOUT (milliseconds).

Use it in templates

Build props in PHP (JSON in .ss files is miserable):

That prints a mount node using the same data-component / data-props attributes as the Vite starter, so existing client registries keep working. The global is already cast as HTMLFragment β€” do not add .RAW.

From PHP:

Partial caching around $ReactComponent is strongly recommended. Each SSR call spawns Node; caching the Silverstripe fragment is how this stays cheap.

Project JavaScript contract

Tumu ships the PHP side only. The project owns the React registry, the SSR entry, and hydration.

SSR entry (app/client/src/ssr.tsx) β€” write to stdout with process.stdout.write, never console.log (a trailing newline becomes a text node and hydration warns):

PHP sends {"component":"Banner","props":{...}} on stdin.

Client hydration (app/client/src/index.tsx):

Vite SSR build (second config so it does not wipe the client dist). Bundle dependencies (ssr.noExternal: true) so production only needs the generated file and node, not node_modules on the web host:

When SS_USE_VITE_DEV_SERVER=true, Tumu skips SSR and emits an empty mount node. HMR stays fast and you avoid hydrating against a stale SSR bundle. To exercise SSR locally, build assets and set SS_USE_VITE_DEV_SERVER=false.

Testing

PHPUnit talks to a real Node process and react-dom/server when Node is on PATH and fixture deps are installed:

If Node or tests/SSR/fixtures/node_modules is missing, those tests are skipped. CI installs Node and the fixtures and sets SSR_INTEGRATION=1 so a skip becomes a failure. Successful SSR must include the React markup inside the mount node; a thrown render, unknown component, or invalid bundle must fall back to an empty client mount.

Limitations

Treat these as product constraints, not temporary gaps:

If those limits are a problem for a given component, skip SSR and keep the client-only data-component mount. That is the supported default.

❌ What tumu is not

It should not be treated as a dumping ground for every and all clever ideas someone has. Features (especially composer ones) should be added with some level of skepticism as to whether they will practically be used by all our clients. Features such as TagField and LinkField is fine as any usage is 'opt-in' for specific sites.

Modules such as Subsites or Translatable haven't been included since we perhaps use them in less than half of the active supported clients and these dramatically alter the CMS interface.

There is also an assumption that this is used for your typical stock standard website and not slightly more left field projects (i.e framework-only).

πŸ”— See also

Licence

Copyright 2025 AKQA NZ Limited

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

  3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS β€œAS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


All versions of silverstripe-tumu with dependencies

PHP Build Version
Package Version
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 akqa/silverstripe-tumu contains the following files

Loading the files please wait ...