Skip to content

Core (vanilla TypeScript)

@scribe-atp/core is pure TypeScript with no runtime dependencies. It works in any environment: Node.js, Deno, Bun, browsers, edge functions, or any JavaScript runtime.

All framework adapters are thin wrappers around this package. If your framework isn’t listed, or you prefer to manage state yourself, use @scribe-atp/core directly.

Terminal window
npm install @scribe-atp/core
import { fetchSite, toSlug } from '@scribe-atp/core';
const site = await fetchSite('alice.bsky.social', toSlug('alice.bsky.social'));
console.log(site.title);
console.log(site.description);
console.log(site.url); // e.g. "alice.bsky.social"
console.log(site.urlPrefix); // e.g. "blog" or ""
for (const group of site.groups) {
for (const article of group.articles) {
console.log(article.title, article.url, article.synopsis);
}
}
// Unpublished articles (assigned to the site but not yet in a group)
console.log(site.ungroupedArticles);
import { fetchArticle } from '@scribe-atp/core';
const article = await fetchArticle('alice.bsky.social', 'my-first-post');
console.log(article.title);
console.log(article.synopsis);
console.log(article.content); // Full HTML — safe to render directly
console.log(article.createdAt);
import { toSlug, slugFromUri, flattenArticles } from '@scribe-atp/core';
toSlug('norobots.blog') // → "norobots-blog"
toSlug('alice.bsky.social') // → "alice-bsky-social"
slugFromUri('at://did:plc:abc/app.scribe.article/my-post') // → "my-post"
// All published articles across all groups, in order
const allArticles = flattenArticles(site.groups);

Both functions accept an optional AbortSignal as a third argument:

// Server context — cancel if the user navigates away
const site = await fetchSite(author, siteSlug, request.signal);
// Client context — cancel on unmount or parameter change
const controller = new AbortController();
const site = await fetchSite(author, siteSlug, controller.signal);
controller.abort(); // cancel
import type { Site, Article, ArticleRef, SiteGroup } from '@scribe-atp/core';

See the API reference for full type definitions.