Skip to main content

Introduction

The Aurora OS App Store provides a lightweight package management system for the browser runtime. Apps are self-contained JavaScript modules that run inside the OS desktop environment with full integration into the launcher, taskbar, and window manager.
The package manager uses client-side localStorage for persistence, making it perfect for Progressive Web App (PWA) deployments without requiring a backend server.

Architecture

The package management system consists of three main components:

Store Catalog

In-memory app registry (STORE_CATALOG) containing app metadata and executable code.
const STORE_CATALOG = [
  {
    id: 'clock-app',
    name: 'World Clock',
    icon: 'clock',
    color: 'linear-gradient(135deg,#1a2040,#0d1530)',
    cat: 'Utilities',
    size: '2 KB',
    rating: 4.5,
    desc: 'Multiple timezone clocks with analog display.',
    run: Function  // App entry point
  },
  // ... more apps
];

Runtime App Registry

The APPS array contains all launchable applications. Installed store apps are automatically merged into this registry on boot.
Runtime Synchronization
STORE_CATALOG.forEach(a => {
  if (isInstalled(a.id) && !APPS.find(x => x.id === a.id)) {
    APPS.push({
      id: a.id,
      name: a.name,
      icon: a.icon,
      color: a.color,
      action: a.run
    });
  }
});

Persistence Layer

All package state is persisted to browser localStorage:
aurora-installed-apps
string[]
JSON array of installed app IDs. Survives page reload and browser restart.

CLI Interface

Manage packages directly from the terminal using the store command:
store list
# Output:
# [✓] clock-app       World Clock        Utilities
# [ ] weather-app     Weather            Utilities
# [✓] notes-app       Sticky Notes       Productivity

Command Reference

store list
command
List all available apps with installation status indicator ([✓] installed, [ ] not installed)
store search <query>
command
Search apps by name or description. Returns filtered list with install status.
store install <app-id>
command
Install an app by ID. Adds to installedApps, updates localStorage, merges into APPS array, and shows notification.
store remove <app-id>
command
Uninstall an app. Removes from installedApps, updates localStorage, removes from APPS, and closes any open windows.
store run <app-id>
command
Launch an installed app. Fails if app is not installed.

GUI Interface

The App Store window provides a visual interface for package management:

Features

Discover Tab

Browse all available apps with featured banner highlighting top apps. Supports filtering by category and search.

Installed Tab

View and manage installed apps. Shows install count in tab badge.

Search

Real-time filtering by app name or description across all apps.

App Cards

Rich app cards with icon, name, category, size, rating, description, and Install/Open/Remove buttons.

App Store Window

Opening the Store
function openStore() {
  createWindow('store', 'App Store', 600, 480, 120, 40, '', 'store');
  // Renders tabs, search, featured banner, and app grid
}

Installation Flow

When a user installs an app:
1

Trigger Installation

User clicks “Install” button in App Store UI or runs store install <id> in terminal.
2

Update State

App ID is added to installedApps array in memory.
3

Persist to Storage

Array is serialized and saved to localStorage['aurora-installed-apps'].
4

Merge to Runtime

App entry is added to APPS array, making it appear in the launcher and taskbar.
5

Confirm

Notification is shown confirming successful installation.
Installation Implementation
function installApp(id) {
  if (!isInstalled(id)) {
    installedApps.push(id);
    localStorage.setItem('aurora-installed-apps', JSON.stringify(installedApps));
    
    const app = STORE_CATALOG.find(a => a.id === id);
    if (app) {
      APPS.push({
        id: app.id,
        name: app.name,
        icon: app.icon,
        color: app.color,
        action: app.run
      });
    }
    
    notify('Installed', `${app?.name || id} installed successfully`, 'download', 'var(--success)');
  }
}

Uninstallation Flow

When a user removes an app:
1

Trigger Removal

User clicks “Remove” button or runs store remove <id>.
2

Update State

App ID is removed from installedApps array.
3

Persist Changes

Updated array is saved to localStorage.
4

Remove from Runtime

App is removed from APPS array.
5

Close Windows

If app window is currently open, it is closed.
6

Confirm

Notification confirms removal.
Uninstallation Implementation
function uninstallApp(id) {
  const idx = installedApps.indexOf(id);
  if (idx >= 0) {
    installedApps.splice(idx, 1);
    localStorage.setItem('aurora-installed-apps', JSON.stringify(installedApps));
  }
  
  const ai = APPS.findIndex(a => a.id === id);
  if (ai >= 0) APPS.splice(ai, 1);
  
  if (wins[id]) closeWindow(id);
  
  notify('Removed', 'App removed', 'trash', 'var(--muted)');
}

Available Apps

The Aurora OS browser runtime includes these built-in apps:
AppCategorySizeRatingDescription
World ClockUtilities2 KB4.5★Multi-timezone analog clocks
WeatherUtilities3 KB4.2★Weather display with forecast
Sticky NotesProductivity2 KB4.7★Color-coded notes saved to localStorage
TasksProductivity2 KB4.6★Task manager with checkboxes
Aurora PaintCreative4 KB4.3★Canvas drawing tool with brush controls
Aurora RadioEntertainment3 KB4.0★Ambient sound generator with FFT visualizer
SnakeGames3 KB4.8★Classic snake game with speed levels
Pomodoro TimerProductivity2 KB4.4★Focus timer with work/break intervals
Image ViewerUtilities2 KB4.2★View images with zoom and slideshow

Categories

Apps are organized into five categories:
Utilities
category
System tools (clocks, weather, image viewer)
Productivity
category
Work tools (notes, tasks, timers)
Creative
category
Drawing and design tools
Entertainment
category
Media and ambient sounds
Games
category
Lightweight browser games

Security

All apps run in the same browser sandbox as the OS runtime with the following constraints:
  • Apps run in browser JavaScript sandbox
  • No filesystem access beyond the virtual FS
  • No network access beyond the virtual network layer
  • Apps cannot modify other apps’ localStorage keys by convention
  • All code is client-side with no server execution

Future: Remote Repository

For native Aurora OS, the package repository server (/userland/pkg-server/) will serve signed packages over HTTPS with TUF-compliant metadata. The browser runtime catalog can be extended to fetch from a remote JSON manifest.

Next Steps

Package Spec

Learn about the app manifest format and package structure

Repository Spec

Understand the catalog structure and repository model

Build docs developers (and LLMs) love