Skip to content

📚 API Methods ​

createNavigationCitadel ​

Factory function that creates a navigation citadel instance.

typescript
import { createNavigationCitadel } from 'vue-router-citadel';

const citadel = createNavigationCitadel(router, {
  outposts: [], // Initial outposts to deploy on creation
  log: true, // Enable non-critical logging (default: __DEV__)
  logger: myLogger, // Custom logger (default: createDefaultLogger())
  debug: false, // Enable logging + debugger breakpoints (default: false)
  debugHandler: myDebugHandler, // Custom debug handler (default: createDefaultDebugHandler())
  devtools: true, // Enable Vue DevTools integration (default: __DEV__)
  onError: (error, ctx) => {
    // Custom error handler (default: console.error + BLOCK)
    return { name: 'error' };
  },
  defaultPriority: 100, // Default priority for outposts
  defaultTimeout: 10000, // Default timeout for outposts in ms (default: undefined)
  onTimeout: (outpostName, ctx) => {
    // Custom timeout handler (default: console.warn + BLOCK)
    return { name: 'error' };
  },
});

install ​

Installs citadel as a Vue plugin. Required for DevTools integration.

typescript
const app = createApp(App);
app.use(router);
app.use(citadel); // DevTools initialized here
app.mount('#app');

Returns void.

deployOutpost ​

Deploys one or multiple navigation outposts.

typescript
// Global outpost (scope defaults to 'global')
citadel.deployOutpost({
  name: 'auth',
  handler: ({ verdicts, to, from, router, hook }) => {
    return verdicts.ALLOW;
  },
  priority: 10, // Optional, lower = processed first
  hooks: [NavigationHooks.BEFORE_EACH], // Optional, default: ['beforeEach']
  timeout: 5000, // Optional, overrides defaultTimeout
  lazy: false, // Optional, enable lazy loading (default: false)
});

// Route outpost (scope must be specified)
citadel.deployOutpost({
  scope: NavigationOutpostScopes.ROUTE,
  name: 'admin-only',
  handler: adminHandler,
});

// Deploy multiple outposts at once
citadel.deployOutpost([outpost1, outpost2, outpost3]);

Returns void.

abandonOutpost ​

Removes outpost(s) by scope and name.

typescript
// Remove single outpost
citadel.abandonOutpost(NavigationOutpostScopes.GLOBAL, 'auth');

// Remove multiple outposts
citadel.abandonOutpost(NavigationOutpostScopes.ROUTE, ['admin-only', 'premium']);

Returns true if outpost was found and removed. When passing an array, returns true only if all outposts were removed, false if any were not found.

getOutpostNames ​

Returns array of deployed outpost names for a given scope.

typescript
citadel.getOutpostNames(NavigationOutpostScopes.GLOBAL); // ['auth', 'analytics']
citadel.getOutpostNames(NavigationOutpostScopes.ROUTE); // ['admin-only', 'premium']

Returns [] if no outposts are deployed for the given scope.

assignOutpostToRoute ​

Assigns outpost(s) to an existing route dynamically. Useful when routes are defined before outposts are deployed.

typescript
// Assign single outpost
citadel.assignOutpostToRoute('admin', 'admin-only');

// Assign multiple outposts
citadel.assignOutpostToRoute('settings', ['auth', 'verified']);

Returns true if route was found and outposts assigned, false otherwise. Duplicates are automatically filtered — calling multiple times with the same outpost name is safe.

revokeOutpostFromRoute ​

Removes outpost(s) from an existing route dynamically. Opposite of assignOutpostToRoute.

typescript
// Remove single outpost
citadel.revokeOutpostFromRoute('admin', 'admin-only');

// Remove multiple outposts
citadel.revokeOutpostFromRoute('settings', ['auth', 'verified']);

Returns true if route was found, false otherwise. Warns if an outpost name is not present in the route's outposts.

destroy ​

Removes all navigation hooks and clears registry. Use when unmounting the application or replacing citadel instance.

typescript
citadel.destroy();

Returns void. After calling destroy(), the citadel instance should not be used.

Released under the MIT License.