Skip to content

Roadmap

This document outlines the Forge SDK development roadmap, including planned extension modules, features, and improvements to bring Forge to feature parity with Electron and Tauri.

Current State

Forge currently has 8 fully implemented extension modules:

ModuleCrateOperationsStatus
host:fsext_fs11Complete
host:windowext_window37Complete
host:ipcext_ipc2Complete
host:netext_net2Complete
host:processext_process7Complete
host:sysext_sys11Complete
host:wasmext_wasm10Complete
host:uiext_ui-Legacy (use host:window)

Phase 1: High Priority Modules

host:crypto - Cryptography & Security

Cryptographic operations for secure applications.

OperationDescriptionSignature
randomBytesCryptographically secure random bytes(size: number) => Uint8Array
randomUUIDGenerate UUID v4() => string
hashHash data (SHA-256, SHA-512, MD5)(algorithm: string, data: Uint8Array | string) => Uint8Array
hashHexHash returning hex string(algorithm: string, data: Uint8Array | string) => string
hmacHMAC signature(algorithm: string, key: Uint8Array, data: Uint8Array) => Uint8Array
encryptSymmetric encryption (AES-GCM)(algorithm: string, key: Uint8Array, data: Uint8Array, iv?: Uint8Array) => EncryptedData
decryptSymmetric decryption(algorithm: string, key: Uint8Array, encrypted: EncryptedData) => Uint8Array
generateKeyGenerate encryption key(algorithm: string, length?: number) => Uint8Array
deriveKeyDerive key from password (PBKDF2)(password: string, salt: Uint8Array, iterations: number, keyLength: number) => Uint8Array
verifyVerify HMAC/signature(algorithm: string, key: Uint8Array, data: Uint8Array, signature: Uint8Array) => boolean

Error codes: 8000-8009


host:storage - Persistent Key-Value Storage

App state persistence with SQLite-backed storage.

OperationDescriptionSignature
getGet value by key<T>(key: string) => Promise<T | null>
setSet value by key<T>(key: string, value: T) => Promise<void>
deleteDelete key(key: string) => Promise<boolean>
hasCheck if key exists(key: string) => Promise<boolean>
keysList all keys() => Promise<string[]>
clearClear all data() => Promise<void>
sizeGet storage size in bytes() => Promise<number>
getManyBatch get(keys: string[]) => Promise<Map<string, unknown>>
setManyBatch set(entries: Record<string, unknown>) => Promise<void>
deleteManyBatch delete(keys: string[]) => Promise<number>

Storage location: ~/.forge/<app-identifier>/storage.db Error codes: 8100-8109 Capability: [capabilities.storage]


host:shell - Shell & OS Integration

Common desktop app integrations for opening files, URLs, and system interactions.

OperationDescriptionSignature
openExternalOpen URL in default browser(url: string) => Promise<void>
openPathOpen file/folder with default app(path: string) => Promise<void>
showItemInFolderReveal file in file manager(path: string) => Promise<void>
moveToTrashMove file to recycle bin/trash(path: string) => Promise<void>
beepSystem beep sound() => void
getFileIconGet file type icon(path: string, size?: number) => Promise<Uint8Array>
getDefaultAppGet default app for file type(extension: string) => Promise<string | null>

Error codes: 8200-8209 Capability: [capabilities.shell]


host:app - Application Lifecycle

Core application management and lifecycle control.

OperationDescriptionSignature
quitQuit application(exitCode?: number) => void
exitForce exit (no cleanup)(exitCode?: number) => void
relaunchRestart application(options?: { args?: string[] }) => void
getVersionGet app version() => string
getNameGet app name() => string
getIdentifierGet app identifier() => string
getPathGet special path(name: PathName) => string
isPackagedCheck if running packaged() => boolean
getLocaleGet system locale() => string
setAppUserModelIdSet Windows taskbar ID(id: string) => void
requestSingleInstanceLockEnsure single instance() => boolean
releaseSingleInstanceLockRelease instance lock() => void
focusBring app to foreground() => void
hideHide all app windows() => void
showShow all app windows() => void
setBadgeCountSet dock/taskbar badge(count: number) => void

Path names: home, appData, userData, temp, exe, desktop, documents, downloads, music, pictures, videos, logs

Error codes: 8300-8309


Phase 2: Medium Priority Modules

host:screen - Display Information

Multi-monitor support and display information.

OperationDescriptionSignature
getPrimaryDisplayGet primary monitor() => Display
getAllDisplaysGet all monitors() => Display[]
getDisplayMatchingGet display containing rect(rect: Rect) => Display
getDisplayNearestPointGet display nearest to point(point: Point) => Display
getCursorScreenPointGet cursor position() => Point
screenEventsDisplay change events() => AsyncGenerator<ScreenEvent>
interface Display {
id: number;
label: string;
bounds: Rect;
workArea: Rect;
scaleFactor: number;
rotation: 0 | 90 | 180 | 270;
isPrimary: boolean;
}

Error codes: 8400-8409


host:globalShortcut - Global Keyboard Shortcuts

System-wide keyboard shortcut registration.

OperationDescriptionSignature
registerRegister global hotkey(accelerator: string, callback: () => void) => boolean
unregisterUnregister hotkey(accelerator: string) => void
unregisterAllUnregister all hotkeys() => void
isRegisteredCheck if registered(accelerator: string) => boolean
shortcutEventsHotkey trigger events() => AsyncGenerator<ShortcutEvent>

Accelerator format: "CommandOrControl+Shift+Z", "Alt+Space", etc.

Error codes: 8500-8509 Capability: [capabilities.globalShortcut]


host:autoUpdater - Application Updates

Automatic application update system.

OperationDescriptionSignature
checkForUpdatesCheck for new version() => Promise<UpdateInfo | null>
downloadUpdateDownload available update() => Promise<void>
quitAndInstallApply update and restart() => void
setFeedURLSet update server URL(url: string) => void
getFeedURLGet current update URL() => string
updateEventsUpdate progress events() => AsyncGenerator<UpdateEvent>
interface UpdateInfo {
version: string;
releaseDate: string;
releaseNotes?: string;
mandatory?: boolean;
}
type UpdateEvent =
| { type: 'checking' }
| { type: 'available'; info: UpdateInfo }
| { type: 'not-available' }
| { type: 'downloading'; progress: number }
| { type: 'downloaded' }
| { type: 'error'; message: string };

Error codes: 8600-8609


host:theme - Native Theme Detection

System theme detection and preference management.

OperationDescriptionSignature
shouldUseDarkColorsCheck if dark mode active() => boolean
getThemeSourceGet theme setting() => 'system' | 'light' | 'dark'
setThemeSourceSet theme preference(source: 'system' | 'light' | 'dark') => void
getAccentColorGet system accent color() => string
getHighContrastCheck high contrast mode() => boolean
themeEventsTheme change events() => AsyncGenerator<ThemeEvent>

Error codes: 8700-8709


host:database - Embedded SQLite Database

Full SQLite database support for complex data storage.

OperationDescriptionSignature
openOpen/create database(name: string, options?: DbOptions) => Promise<Database>
closeClose database(db: Database) => Promise<void>
executeExecute SQL (no return)(db: Database, sql: string, params?: unknown[]) => Promise<number>
queryQuery with results<T>(db: Database, sql: string, params?: unknown[]) => Promise<T[]>
queryOneQuery single row<T>(db: Database, sql: string, params?: unknown[]) => Promise<T | null>
batchExecute multiple statements(db: Database, statements: string[]) => Promise<void>
transactionRun in transaction<T>(db: Database, fn: () => Promise<T>) => Promise<T>
preparePrepare statement(db: Database, sql: string) => PreparedStatement

Database location: ~/.forge/<app-identifier>/databases/<name>.db

Error codes: 9000-9019 Capability: [capabilities.database]


Phase 3: Low Priority Modules

host:dock - macOS Dock Integration

macOS-specific dock customization.

OperationDescriptionSignature
bounceBounce dock icon(type?: 'critical' | 'informational') => number
cancelBounceStop bounce(id: number) => void
setBadgeSet badge text(text: string) => void
getBadgeGet badge text() => string
hideHide dock icon() => void
showShow dock icon() => void
isVisibleCheck dock visibility() => boolean
setIconSet custom dock icon(image: Uint8Array | null) => void
setMenuSet dock menu(menu: MenuItem[]) => void

Platform: macOS only (no-op on other platforms) Error codes: 8800-8809


host:taskbar - Windows Taskbar Integration

Windows-specific taskbar customization.

OperationDescriptionSignature
setProgressBarSet progress indicator(progress: number, options?: ProgressOptions) => void
setOverlayIconSet overlay icon(icon: Uint8Array | null, description?: string) => void
setThumbarButtonsSet thumbnail toolbar(buttons: ThumbarButton[]) => void
setJumpListSet jump list(categories: JumpListCategory[]) => void
flashFrameFlash taskbar button(flash: boolean) => void

Platform: Windows only (no-op on other platforms) Error codes: 8900-8909


host:protocol - Custom Protocol Handlers

Deep linking and custom URL scheme support.

OperationDescriptionSignature
registerSchemeRegister URL scheme(scheme: string) => Promise<boolean>
unregisterSchemeUnregister scheme(scheme: string) => Promise<void>
isSchemeRegisteredCheck registration(scheme: string) => boolean
setAsDefaultProtocolClientSet as OS default(scheme: string) => Promise<boolean>
removeAsDefaultProtocolClientRemove as default(scheme: string) => Promise<boolean>
isDefaultProtocolClientCheck if default(scheme: string) => boolean
protocolEventsIncoming URL events() => AsyncGenerator<ProtocolEvent>

Error codes: 9100-9109


host:session - WebView Session Management

WebView session and cookie management.

OperationDescriptionSignature
getCookiesGet cookies for URL(url: string) => Promise<Cookie[]>
setCookieSet cookie(cookie: Cookie) => Promise<void>
removeCookiesRemove cookies(url: string, name?: string) => Promise<void>
clearStorageDataClear browsing data(options?: ClearStorageOptions) => Promise<void>
setProxySet proxy config(config: ProxyConfig) => Promise<void>
resolveProxyResolve proxy for URL(url: string) => Promise<string>
setUserAgentSet user agent(userAgent: string) => void
getUserAgentGet user agent() => string

Error codes: 9200-9209


host:download - Download Manager

File download tracking and management.

OperationDescriptionSignature
startStart download(url: string, options?: DownloadOptions) => Promise<Download>
pausePause download(downloadId: string) => Promise<void>
resumeResume download(downloadId: string) => Promise<void>
cancelCancel download(downloadId: string) => Promise<void>
getStateGet download state(downloadId: string) => DownloadState
downloadEventsDownload progress events() => AsyncGenerator<DownloadEvent>

Error codes: 9300-9309


host:log - Structured Logging

Production-ready logging with file rotation.

OperationDescriptionSignature
debugDebug level log(message: string, ...args: unknown[]) => void
infoInfo level log(message: string, ...args: unknown[]) => void
warnWarning level log(message: string, ...args: unknown[]) => void
errorError level log(message: string, ...args: unknown[]) => void
setLevelSet minimum level(level: 'debug' | 'info' | 'warn' | 'error') => void
setFileEnable file logging(path: string, options?: LogFileOptions) => void
flushFlush log buffer() => Promise<void>

Log location: ~/.forge/<app-identifier>/logs/ Error codes: 9400-9409


Phase 4: Features & Processes

Hot Reload System

Live reload for development workflow.

Components:

  • File watcher for src/ and web/ directories
  • WebSocket server for reload signals
  • Deno module cache invalidation
  • HMR protocol for web assets

Single Instance Lock

Prevent multiple app instances.

Components:

  • Lock file or socket-based detection
  • IPC to existing instance
  • Focus existing window on duplicate launch

Error Code Standardization

Consistent error codes across all modules.

Modules requiring updates:

  • ext_net - Add codes 4000-4009
  • ext_process - Add codes 5000-5009
  • ext_sys - Add codes 5500-5509

Deep Linking

OS-level URL scheme handling.

Components:

  • Integrate with host:protocol
  • Startup argument parsing for URLs
  • Event dispatch to running app

Accessibility APIs

Screen reader and accessibility support.

Components:

  • Screen reader announcements
  • Accessibility tree access
  • High contrast detection

Internationalization Support

Locale and RTL support.

Components:

  • Locale detection
  • RTL support hints
  • Number/date formatting

Summary

CategoryCount
New extension modules15
New operations~116
New error code ranges15
New capabilities8
Features/processes6

Implementation Order

Phase 1 (High Priority):

  1. ext_crypto (10 ops)
  2. ext_storage (10 ops)
  3. ext_shell (7 ops)
  4. ext_app (16 ops)

Phase 2 (Medium Priority): 5. ext_screen (6 ops) 6. ext_globalshortcut (5 ops) 7. ext_autoupdater (6 ops) 8. ext_theme (6 ops) 9. ext_database (8 ops)

Phase 3 (Low Priority): 10. ext_dock (9 ops) 11. ext_taskbar (5 ops) 12. ext_protocol (7 ops) 13. ext_session (8 ops) 14. ext_download (6 ops) 15. ext_log (7 ops)

Phase 4 (Features): 16. Error code standardization 17. Hot reload system 18. Single instance lock 19. Deep linking 20. Accessibility APIs 21. Internationalization support