Netpress Laravel-inspired backend framework for Node.js
Frameworkv0.1.14 Starterv0.1.12 Docsv1.0.3
Overview Installation Architecture CLI
Architecture

Providers

Providers are the boot layer of a Netpress application.

They register services, load config, attach middleware, and mount routes in a predictable order. If you want to understand how a Netpress app starts, providers are the place to look.

Why Providers Matter

Without providers, boot logic usually gets scattered across:

  • route files
  • random startup modules
  • framework entry files
  • one-off infrastructure helpers

Providers keep that setup in one predictable place.

Provider Shape

import { ServiceProvider } from "@admicaa/netpress";

export default class PaymentServiceProvider extends ServiceProvider {
  static deferred = true;
  static provides = ["payments.stripe"];

  async register() {
    // bind services, load config, keep it cheap
  }

  async boot() {
    // optional startup side effects
  }
}

register() vs boot()

  • register() is for bindings and lightweight setup
  • boot() is for side effects and runtime wiring
  • deferred providers skip boot() until their services are first resolved

This is what lets Netpress stay modular and lazy-loaded.

Common Provider Responsibilities

  • bind services into the container
  • load config
  • register auth guards
  • mount routes
  • configure mail, queue, storage, cache, and events

Starter Providers

The starter app includes providers with clear responsibilities:

ProviderResponsibility
AppServiceProviderglobal middleware, response helpers, shared runtime setup
DatabaseServiceProvidershared database runtime and models
AuthServiceProviderauth guards and optional OAuth setup
MailServiceProviderdeferred mail system
QueueServiceProviderdeferred queue runtime
EventServiceProviderevents and observers
RouteServiceProviderweb and API routes

Example: Custom Provider

import { ServiceProvider } from "@admicaa/netpress";
import Stripe from "stripe";

export default class PaymentServiceProvider extends ServiceProvider {
  static deferred = true;
  static provides = ["payments.stripe"];

  async register() {
    this.app.container.bind("payments.stripe", () => {
      return new Stripe(process.env.STRIPE_SECRET_KEY);
    });
  }
}

Then add it to bootstrap/providers.js.

Good Provider Rules

  • keep register() cheap
  • keep infrastructure wiring out of controllers
  • use deferred providers for expensive systems
  • place providers in a clear dependency order

For the lazy-loading model behind providers, read Hybrid Bootstrap.