1. Wiki
  2. aether-packages

Aether-Packages by AetherAssembly

Version 1.0.3 CI status AGPL-3.0

Shared npm packages published to the GitHub Package Registry under the @aetherAssembly scope. Used by Before It's Gone.

GitHub →

Packages

PackageVersionDescription
@aetherAssembly/core1.0.3Storage adapters and shared TypeScript types
@aetherAssembly/ui1.0.3React 19 component library

Installation

Both packages are published to the GitHub Package Registry. Add the following to your project's .npmrc:

@aetherAssembly:registry=https://npm.pkg.github.com

Then install as normal:

npm install @aetherAssembly/core
npm install @aetherAssembly/ui   # React apps only
Auth required: GitHub Packages requires a personal access token with read:packages scope set as NODE_AUTH_TOKEN, even for public packages. Add it to ~/.npmrc:
//npm.pkg.github.com/:_authToken=YOUR_TOKEN

@aetherAssembly/core

Framework-agnostic utilities for local-first apps.

Storage adapters

All three adapters implement the same async StorageAdapter interface, so you can swap them without changing call sites:

import { IDBAdapter, LocalStorageAdapter, MemoryAdapter } from '@aetherAssembly/core'
import type { StorageAdapter } from '@aetherAssembly/core'
AdapterBacked byBest for
IDBAdapterIndexedDBAny significant data in a browser — no quota limits, off-main-thread
LocalStorageAdapterlocalStorageSmall flags and settings; gracefully no-ops in SSR/workers
MemoryAdapterMapUnit tests — implements the full interface, no side effects
const storage = new IDBAdapter('my-app', 'items')

await storage.set('theme', 'dark')
const theme = await storage.get<string>('theme')  // 'dark'
await storage.keys()                               // ['theme']
await storage.delete('theme')
await storage.clear()

See the Storage page for the full adapter contract and usage details.

Shared types

import type { ID, Timestamp, Nullable, Optional, BaseEntity } from '@aetherAssembly/core'

interface WardrobeItem extends BaseEntity {
  // id, createdAt, updatedAt inherited
  name: string
  category: string
}

@aetherAssembly/ui

React 19 components styled with --ae-* CSS custom properties. Import the stylesheet once and override tokens to match your app's palette.

import { Button, Card, Badge, Input, Modal } from '@aetherAssembly/ui'
import '@aetherAssembly/ui/src/styles.css'
ComponentDescription
Button4 variants · 3 sizes · loading state with spinner
Cardheader and footer ReactNode slots
Badge5 variants: default · success · warning · danger · info
Inputlabel · error with aria-invalid · hint text
Modalnative <dialog> with showModal(); backdrop click to close

See the UI Components page for the full token reference and per-component prop tables.

How Before It's Gone uses these packages

Before It's Gone installs both packages at the monorepo root. Its local workspace packages are named @aetherAssembly/big-core and @aetherAssembly/big-ui to avoid colliding with the upstream scope. @aetherAssembly/big-core re-exports LocalStorageAdapter from @aetherAssembly/core for settings storage, and @aetherAssembly/big-ui uses components from @aetherAssembly/ui (e.g. Badge in InventoryCard).

License

Both packages are published under AGPL-3.0-only. If you use them in your own project — including as a network service — your project must also be released under AGPL-3.0 and its source made available to users. Contact support@aetherassembly.org to discuss a commercial licence.

Last updated: 2026-10-04 AetherAssembly/aether-packages → License: AGPL-3.0-only