ngx-speculation-rules

November 29, 2025 ยท View on GitHub

Angular library for the Speculation Rules API - Enable prefetching and prerendering for faster page navigations.

Angular SSR and Universal Friendly. Zoneless compatible.

Demo

See a live demo

Versions

Latest version available for each version of Angular

ngx-speculation-rulesAngular
1.0.018.x - 20.x

Features

  • ๐Ÿš€ Prefetch - Load resources before they're needed
  • โšก Prerender - Render pages in the background for instant navigation
  • ๐Ÿ”ง Configurable - Control eagerness levels and targeting rules
  • ๐Ÿ“ฑ SSR Compatible - Works with Angular Universal/SSR
  • ๐ŸŽฏ Zoneless Ready - Compatible with Angular's zoneless mode

Installation

npm install ngx-speculation-rules

Basic Usage

Provider Setup

// app.config.ts
import { ApplicationConfig } from '@angular/core';
import { provideSpeculationRules } from 'ngx-speculation-rules';

export const appConfig: ApplicationConfig = {
  providers: [
    provideSpeculationRules({
      autoInsert: true,
      defaultRules: {
        prefetch: [{
          source: 'document',
          eagerness: 'moderate',
          where: {
            selector_matches: 'a[href^="/"]'
          }
        }]
      }
    })
  ]
};
provideSpeculationRules({
  autoInsert: true,
  defaultRules: {
    prefetch: [{
      source: 'document',
      eagerness: 'moderate',
      where: {
        selector_matches: 'a[href^="/"]'
      }
    }]
  }
})

Prerender Specific Pages

provideSpeculationRules({
  autoInsert: true,
  defaultRules: {
    prerender: [{
      source: 'list',
      urls: ['/about', '/contact', '/products'],
      eagerness: 'moderate'
    }]
  }
})

Dynamic Rules with Service

import { Component, inject } from '@angular/core';
import { SpeculationRulesService } from 'ngx-speculation-rules';

@Component({...})
export class MyComponent {
  private speculationService = inject(SpeculationRulesService);

  addPrefetchRule() {
    this.speculationService.insertRules({
      prefetch: [{
        source: 'document',
        eagerness: 'eager',
        where: {
          selector_matches: '.prefetch-link'
        }
      }]
    }, 'custom-prefetch');
  }

  removeRule() {
    this.speculationService.removeRules('custom-prefetch');
  }

  clearAllRules() {
    this.speculationService.clearAllRules();
  }
}

API Reference

Provider Configuration

OptionTypeDescription
autoInsertbooleanAutomatically insert default rules on init
defaultRulesSpeculationRulesDefault speculation rules to apply

Service Methods

MethodReturnDescription
insertRules(rules, id?)string | nullInsert rules, returns script ID
removeRules(id)booleanRemove rules by ID
clearAllRules()voidRemove all speculation rules

Service Properties

PropertyTypeDescription
isSupportedSpeculationSupportBrowser support information
isPrerenderingbooleanCheck if page is currently prerendering

Eagerness Levels

LevelDescription
immediateSpeculate as soon as possible
eagerSpeculate on any small positive signal
moderateSpeculate on hover for 200ms
conservativeSpeculate only on pointer/touch down

Browser Support

The Speculation Rules API is supported in Chromium-based browsers (Chrome 109+, Edge 109+). The library gracefully handles unsupported browsers.

License

MIT