Templates · Kits
Kits are finished pieces of an application.
Data, security, workflows, screens and tests — done once. Your application inherits them.
Osysharp.Mail isn’t a mail API library. Osysharp.Accounts isn’t authentication plumbing. Osysharp.Conversations isn’t a collection of messaging utilities. Each is a finished piece of an application that another application inherits with one line — and agents compose the kits and write what makes your application different.
- 87 kits
- 16 areas
- 1,831 tests
Commerce 4
| Kit | What it does | Builds on | Tests |
|---|---|---|---|
ShopOsysharp.ShopSource | An online shop's backend — catalogue, bag, orders, pluggable payment and delivery providers, returns, mail and the staff desk — with its customers and staff signing in through Osysharp.Accounts. | Identity, Accounts, PDF writer, Payments, Delivery, SEO, Analytics, Email templates, CSV, Markdown editor, Resend, Mailing lists, Site looks — the contract | 375 |
Discount codesOsysharp.Shop.Discounts | Discount codes for the shop — percent, amount or free delivery, with limits and dates. | Shop | 13 |
Product reviewsOsysharp.Shop.Reviews | Product reviews for the shop — verified buyers only, moderated by staff, averaged for search engines. | Shop, Identity, SEO | 20 |
SubscriptionsOsysharp.Shop.Subscriptions | Subscriptions for the shop — plans and add-ons per interval, entitlements, renewals, prorated changes. | Shop, Payments, Email templates | 37 |
Service desk 13
| Kit | What it does | Builds on | Tests |
|---|---|---|---|
InboxOsysharp.Inbox | Work queues, who holds what, and the service levels promised on it, over any item an app derives from WorkItem — and typed links between items, of kinds the app declares — with the screens a team works it from. | Identity, Organizations, Organizations — customer accounts, Collaboration | 104 |
ConversationsOsysharp.Conversations | One conversation across channels — a single ordered timeline of messages, notes and events per conversation, visibility per entry enforced by rules (internal never reaches a customer), channels as adapters (email, SMS), a chat widget for a page or as a launcher in its corner with the app's own help above the first message, unread chat replies mailed (or sent on whichever channel reaches the kind of contact point the app names) with a single-use continue link, parties proven by a mailed code and merged or unmerged, people copied in and taken off by the desk, a message split off into a conversation of its own (it moves, with its files and its mail thread), side conversations started beside one — mail to somebody outside or a thread inside the team, drawn as a card on its timeline that opens into its own thread, the other side never seeing the conversation it is beside, each customer answered in their own language with every message scrubbed of card numbers at rest, a redacted canonical copy in the shared memory corpus, files on messages — a pasted screenshot shown in place, a source file previewed with its lines coloured, a ZIP listed, every file a download readable exactly where its message is — and an erasure run that reaches every copy, recorded and run only as a privacy request's plan or a conversation's period says (Osysharp.Privacy.Conversations). | Identity, Collaboration | 118 |
Conversations by mailOsysharp.Conversations.Mail | Email as a channel for Osysharp.Conversations — replies through Osysharp.Mail's outbox, from the address the customer wrote to and threaded; a mail received continues its conversation; out-of-office replies and bounces recognised. | Identity, Mail, Mail receiving, Conversations | 19 |
Conversations by textOsysharp.Conversations.Sms | Text messages as a channel for Osysharp.Conversations — replies through Osysharp.Sms's outbox from the app's own number, a text received continues that number's latest conversation within a window, carrier delivery reports, and a refusal of an alphanumeric sender that could never be answered. | Identity, Text messages, Conversations | 7 |
Conversations in every languageOsysharp.Conversations.MachineTranslation | The app's own model as the translator of its conversations — a copy of every customer message in the desk's language and every reply in each customer's, through the app's key, router and budget; a missing key a state the desk is told about, never a lost message. | Conversations, Machine translation | 3 |
CollaborationOsysharp.Collaboration | Who else is on a record, live — a presence topic addressed by any record's id, staff-only by the app's own rule, each seat stamped with who by the platform and carrying an activity (viewing, replying, assigning) but never content; a seats strip for the record's header; and the 'moved first' sentence that turns a concurrency refusal into who changed which fields and when. | Identity | 10 |
Composer — writing a replyOsysharp.Composer | Where a person writes a reply to any record — saved replies with typed placeholders filled from the record (an unknown key refused when saved, an unfillable one refused at send), macros that stage the app's own verbs and run them with the send, markdown formatting with a bar and keys that act on the selection, drafts saved per record and per author that survive a reload (and a seam for a draft prepared by someone else), the writer's signature, files pasted, dropped or picked, and 'send and set…' as the app's choice. | Identity | 30 |
Automations — rules that do the routine workOsysharp.Automations | Rules that do an app's own work when something happens — a trigger from any event about the record or the hourly clock, conditions on the record's own fields as the rule's author may read them (and how long it has waited), and steps that are the app's own [Action] functions with the choices they offer; run in order, as the person who saved them under their own security, loop-protected, each fire recorded; the app's rules declared in code, copied by the team or a person to change them (restorable, lockable). | Identity | 26 |
NotificationsOsysharp.Notifications | Telling a person something needs them — a bell with a live count and a list (read and unread, mark all read), a daily mail digest of what they have not seen or a mention mailed at once (their own choice, in their own language), delivered durably after the commit, deduplicated while unread, and never about a record the recipient may not read under their own security. | Identity, Mail, Email templates, Clock — the team's time zone and week | 23 |
Inbox reports — what the desk didOsysharp.Inbox.Reports | Osysharp.Reports sources for Osysharp.Inbox — arrived, done, first reply and time to done (median and slowest tenth), open now, and promises kept, by agent, queue, channel, organization, tier and priority. | Identity, Organizations, Organizations — customer accounts, Inbox, Reports — build them, share them | 2 |
Inbox notifications — who the inbox names, toldOsysharp.Inbox.Notifications | The inbox's people told in their bell — an item offered to them, work handed to them while its holder is away, a promise at risk or missed on what they hold, and a queue's leads when nobody picks an item up — in their own words and language, and never about an item they may not read; the leads are whoever the app's LeadsInbox policy says. | Identity, Inbox, Notifications | 6 |
Feedback — how did we do?Osysharp.Feedback | Asking the person a piece of work served how it went — one good-or-bad answer and an optional comment per subject and person (held by the database), answered from a mail link with no account or signed in on the app's page, changeable for a while, applied durably after the commit, and read back as a summary: answered, good, week by week, recent comments. | Identity, Mail, Email templates | 24 |
Knowledge base and help centreOsysharp.Knowledge | A knowledge base and its public help centre — markdown articles in categories and sections, drafts, numbered versions, review before publishing (nobody publishes their own words while review is on), a version per language with the original as fallback, team-only articles that never reach a customer or a search, search and suggestions as a person types — in each version's own language, so an inflected word finds its other forms, and by meaning once the app has an embedder — structured data and a sitemap for search engines, and the desk to write, review and arrange it all. | Identity, Markdown editor, Stemming for search, SEO | 40 |
Payments 4
| Kit | What it does | Builds on | Tests |
|---|---|---|---|
PaymentsOsysharp.Payments | The payment-provider contract — start, confirm, capture, refund, cancel and webhook events — plus manual payment. | — | 4 |
StripeOsysharp.Payments.StripeSource | Card payments through Stripe — payment intents, checkout sessions, customers, refunds, verified webhooks, and a payments-contract provider. | Payments | 44 |
KlarnaOsysharp.Payments.KlarnaSource | Klarna payments — a session, an order, and the capture/refund half that comes after. | Payments | 32 |
SwishOsysharp.Payments.Swish | Swish payments — a request to the payer's phone or a QR code, status asked of Swish over mutual TLS, and refunds. | Payments | 28 |
Delivery 4
| Kit | What it does | Builds on | Tests |
|---|---|---|---|
DeliveryOsysharp.Delivery | The delivery contract — quote, ship, track and carrier events — plus flat-rate delivery and collection. | — | 6 |
PostNordOsysharp.Carriers.PostNord | PostNord parcels — booking with a PDF label, track & trace, service points, and a delivery provider. | Delivery | 12 |
SendcloudOsysharp.Carriers.Sendcloud | Sendcloud — many European carriers behind one API: labels, customs, tracking, returns, pickups, and a delivery provider. | Delivery | 9 |
ShippoOsysharp.Carriers.Shippo | Shippo — USPS, UPS, FedEx and DHL Express behind one API: labels, customs, returns, tracking, and a delivery provider. | Delivery | 8 |
Finance 3
| Kit | What it does | Builds on | Tests |
|---|---|---|---|
BookkeepingOsysharp.Shop.Bookkeeping | A shop's books — SIE 4, CSV and the VAT report per rate — from its invoices and credit notes. | Shop, Payments | 28 |
VIESOsysharp.Shop.Vies | EU VAT-number checks against VIES — the shop's reverse-charge check. | Shop | 3 |
ECB exchange ratesOsysharp.Shop.Ecb | The European Central Bank's daily reference rates, for showing a visitor prices in their own currency. | Shop | 3 |
Mail 10
| Kit | What it does | Builds on | Tests |
|---|---|---|---|
Mailing listsOsysharp.MailingLists | Mailing lists — double opt-in, consent recorded word for word, signed unsubscribe and preferences, suppression of bounces and complaints, export and erasure. | Email templates, CSV | 19 |
ResendOsysharp.ResendSource | Transactional email through Resend — one send or a batch, text and HTML, replies and attachments. | — | 14 |
Microsoft 365Osysharp.Graph | Microsoft 365 through Graph — mail, calendar and files, as the signed-in user or as the app. | — | 19 |
Email templatesOsysharp.EmailTemplates | Mail that looks designed — a layout with preview line, logo and footer, headings, text, buttons, pictures and receipt lines, in the app's own theme — and the mail blocks staff arrange in a mail's region. | — | 15 |
MailOsysharp.Mail | Mail an app sends — one message shape, a pluggable sender, an outbox that delivers after the commit and holds mail when there is no sender; connected mailboxes it sends from (and, with Osysharp.Mail.Receiving, reads); MIME parsing and reply extraction. | Identity | 26 |
Mail receivingOsysharp.Mail.Receiving | Watched mailboxes — new mail pushed (Gmail via Pub/Sub, Microsoft 365 via Graph) with a half-hourly safety net, or polled; each message kept once with its original, handed to the app's receiver after the commit, retried, failed with its reason, erasable by sender; and the settings page for whoever manages them. | 23 | |
Gmail mailboxOsysharp.Mail.Gmail | A Gmail / Google Workspace inbox as a mailbox for Osysharp.Mail — new mail pushed through Cloud Pub/Sub (polled without), replies sent from it, threaded. | 12 | |
Microsoft 365 mailboxOsysharp.Mail.Microsoft365 | A Microsoft 365 mailbox as a mailbox for Osysharp.Mail — new mail polled through Graph, replies sent from it, threaded. | 12 | |
IMAP mailboxOsysharp.Mail.Imap | Any IMAP mailbox as a mailbox for Osysharp.Mail — new mail read over IMAP, replies sent over SMTP, threaded. | 3 | |
Resend mail senderOsysharp.Mail.Resend | Resend as a sender for Osysharp.Mail — threading headers and attachments included. | Mail, Resend | 2 |
Text messages 3
| Kit | What it does | Builds on | Tests |
|---|---|---|---|
46elksOsysharp.Elks | SMS through 46elks — one message or a fan-out, with delivery reports and a dry run. | — | 12 |
Text messagesOsysharp.Sms | Text messages an app sends — one message shape, a pluggable sender, an outbox that delivers after the commit and holds messages when there is no sender. | Identity | 10 |
46elks text senderOsysharp.Sms.Elks | 46elks as a sender for Osysharp.Sms — Nordic alphanumeric senders, EU-only handling, and a dry run for staging. | Text messages, 46elks | 2 |
Identity 8
| Kit | What it does | Builds on | Tests |
|---|---|---|---|
BankIDOsysharp.BankId | Swedish BankID — auth and sign with animated QR or autostart, over mutual TLS. | — | 17 |
Age check with BankIDOsysharp.Shop.BankId | Age verification with Swedish BankID — the shop's AgeVerifier, over mutual TLS. | Shop, BankID | 11 |
IdentityOsysharp.Identity | Who signs in, and which of the app's roles each person holds — the base every people-aware kit builds on. | — | 12 |
AccountsOsysharp.Accounts | Sign-in (password, or a provider such as Google or GitHub, linked from the account page), sign-up, password reset and change, verified address change (one the desk can start, confirmed from the new address) and verification, an address proven by a mailed link or code, two-step sign-in with an authenticator app and recovery codes, and a phone number proven by a texted code (to sign in with, or as an optional second step) — with pages — on Osysharp.Identity. | Identity, Mail, Text messages, Email templates | 133 |
PeopleOsysharp.People | The user manager: a searchable people list (roles, two-step sign-in, last sign-in, sessions), and audited access changes — grant and revoke the app's roles, deactivate and reactivate, reset a lost second factor, sign out everywhere, and the same within an organisation; API keys issued once and revoked at once, and integrations — programs that work under their own name with keys and a role and can never sign in — each one a record of who changed whose access, when and why, made only by the app's people managers. | Identity, Accounts, Organizations, Invitations, Mail | 39 |
OrganizationsOsysharp.Organizations | Customer companies and internal teams: who belongs to which, roles held within one organisation (the app's own roles, scoped), mail domains that put a newcomer with a PROVEN address in the right company, and membership rows that remember their source and external id so single sign-on and SCIM can keep them in step. | Identity | 17 |
Organizations — customer accountsOsysharp.Organizations.Accounts | The service each customer organisation gets — its tier, its entitlements (by tier or its own contract, for a period), its account team (owner, pod, backup) and its VIP people — set by the app's organisation managers alone, and carried for support and sales kits to route and promise by; with a settings page for the tiers. | Identity, Organizations | 10 |
InvitationsOsysharp.Invitations | Invite a person by address with their role (and organisation) fixed when it is sent — mailed, reminded, expiring, revocable and resendable as a durable run; answered only by the invited address: a newcomer through a single-use mailed link, an existing account only once fully signed in (its second step included) and with that address proven. | Identity, Accounts, Organizations, Mail, Email templates | 22 |
Privacy 8
| Kit | What it does | Builds on | Tests |
|---|---|---|---|
PrivacyOsysharp.Privacy | What the app holds about a person and why it may keep it — a versioned holder contract every kit implements, categories with a retention basis and a period the tenant sets within declared limits (with jurisdiction presets and a fiscal-year-aware end date), requests that plan erase / keep restricted until a date / blocked per category and run as a workflow, a response that says what was erased and what was kept and why, an access and portability export, and a daily purge. | Identity, Inbox, Mail | 71 |
Privacy — the account step-upOsysharp.Privacy.Accounts | The step-up for Osysharp.Privacy's self-service requests, from Osysharp.Accounts — a code to the account's own address, typed back, spent once by the request's run. | Identity, Accounts, Privacy | 4 |
Privacy for conversationsOsysharp.Privacy.Conversations | Osysharp.Privacy's holder for Osysharp.Conversations — complaints kept RESTRICTED for legal claims — read only for a claim, every read logged — while the rest of a person's conversations, their contact points and the redacted copies are erased on request, a daily purge that ends every conversation's period, the app's own say on which conversations concern a claim, and a person with no account proving their address to ask for themselves. | Identity, Conversations, Privacy | 23 |
Privacy for received mailOsysharp.Privacy.MailReceiving | Osysharp.Privacy's holder for Osysharp.Mail.Receiving — the mail a person sent to the app's watched mailboxes, as it arrived, in their copy of their data and erased when they ask. | Identity, Mail, Mail receiving, Privacy | 2 |
Privacy for notificationsOsysharp.Privacy.Notifications | Osysharp.Privacy's holder for Osysharp.Notifications — a person's notifications and their preferences, found by their account, in their copy of their data, kept restricted on request and erased when they ask. | Identity, Notifications, Privacy | 3 |
Privacy for text messagesOsysharp.Privacy.Sms | Osysharp.Privacy's holder for Osysharp.Sms — the texts the app sent a person, found by their number, in their copy of their data and erased when they ask. | Identity, Text messages, Privacy | 2 |
Privacy for feedbackOsysharp.Privacy.Feedback | Osysharp.Privacy's holder for Osysharp.Feedback — a person's questions and answers about how it went, found by their account or a proven address, in their copy of their data, kept restricted on request and erased when they ask. | Identity, Feedback — how did we do?, Privacy | 4 |
Privacy for the knowledge baseOsysharp.Privacy.Knowledge | Osysharp.Privacy's holder for Osysharp.Knowledge — the articles and versions a person wrote or published and the review steps they took, found by their account, in their copy of their data, their review notes kept restricted on request, and their name taken off everything when they ask to be erased while the articles stay. | Identity, Knowledge base and help centre, Privacy | 3 |
AI models 5
| Kit | What it does | Builds on | Tests |
|---|---|---|---|
AnthropicOsysharp.Models.Anthropic | The Anthropic Messages API as an app.Models Client — complete and stream, with prompt caching. | — | — |
Machine translationOsysharp.MachineTranslation | Language detection that works offline (scripts, and the commonest words of twelve European languages) and translation through the app's own model — glossary terms kept as written, a missing key a state rather than an error. | — | 15 |
OpenAIOsysharp.Models.OpenAi | The OpenAI Chat Completions API as an app.Models Client — and any endpoint that speaks its wire. | — | — |
GeminiOsysharp.Models.Gemini | The Google Gemini API as an app.Models Client — complete and stream, tools included. | — | — |
Model routerOsysharp.LlmRouter | A cost-tiered model router: hard capability filters, a quality floor per task kind, then cheapest-admissible. | — | — |
Web 5
| Kit | What it does | Builds on | Tests |
|---|---|---|---|
DNSOsysharp.Dns | DNS records an app writes — one record shape, a pluggable provider, add-a-value TXT semantics, and a provider that keeps records in the app's own table. | — | 8 |
Cloudflare DNSOsysharp.Dns.Cloudflare | Cloudflare DNS as an Osysharp.Dns provider — records by the v4 API, TXT values added and removed one at a time, never proxied. | DNS | 9 |
SEOOsysharp.Seo | Schema.org structured data (JSON-LD) for a page's head — products, offers, articles, breadcrumbs, organizations. | — | 5 |
AnalyticsOsysharp.Analytics | Web analytics — Plausible or Google Analytics 4: page views, e-commerce events, and consent before GA4 tracks. | — | 3 |
Pages — the page deskOsysharp.Pages | The page desk: arrange each Region's blocks with generated forms and a live preview, site versions on a schedule, and a staff preview of the whole site. | Markdown editor | 20 |
Data 10
| Kit | What it does | Builds on | Tests |
|---|---|---|---|
Fields — custom fields and formsOsysharp.Fields | Fields an app's admins add to its records without a release — text, numbers, yes or no, a choice, a date; required or optional; asked of outside people or kept for the team — on forms with conditions, every answer checked on the server and held to its kind on every write; each kind of record declares its own field and value types, so a value's security is its record's; with the question controls, the in-place editor for a record's fields, and the settings sections to define fields and forms. | — | 16 |
SnowflakeOsysharp.Warehouses.Snowflake | Snowflake as a data source and an export destination: entities read from a warehouse, and changes merged into its tables. | — | 2 |
DatabricksOsysharp.Warehouses.Databricks | Databricks as a data source and an export destination: entities read from a SQL warehouse, and changes merged into its tables. | — | 3 |
CSVOsysharp.Csv | CSV in and out — quoted fields, Excel's separators and byte-order mark, formula-safe cells. | — | 5 |
Webhooks — tell other systems, signedOsysharp.Webhooks | Outbound webhooks — an administrator subscribes an endpoint to any of the events the app and its kits raise about a record; each one is sent as a JSON document signed the Standard Webhooks way under a secret shown once and kept sealed, delivered durably after the commit with doubling retries, given up on in the end and the subscription paused when it keeps failing, every attempt in a delivery log whose documents are removed after a short declared retention; only what the subscription's maker may read is ever sent; a settings page to add, test, pause, roll the secret of and remove subscriptions and to send a failed delivery again. | Identity | 25 |
Activity — a record's timelineOsysharp.Activity | A record's timeline, from the events the app and its kits raise — one line per event on the record it is about and on each record it rolls up to, said in the reader's words from the event's own sentence, shown only to somebody who may read the record, kept for a declared time; one component to place it on a record's page. | Identity | 5 |
Reports — build them, share themOsysharp.Reports | Reports a team builds for itself — start from one thing the app keeps, pick fields by following its relations, group, measure (counts, totals, averages, medians and percentiles) and filter, all computed in the database as the reader may read it — read as figures, a table and a chart, exported as CSV, saved and shared by name. | Identity, Clock — the team's time zone and week, Charts, CSV | 57 |
Clock — the team's time zone and weekOsysharp.Clock | The app's clock — the time zone its days start in and the day its week starts, picked by staff from the app's declared zones on one settings page and read by every kit that counts in days. | — | 6 |
Stemming for searchOsysharp.Stemming | Words in their base form for search — Snowball stemmers for English, Swedish, Danish and Norwegian and a light Arabic stemmer, so an inflected query finds the other forms of its words; any other language matched word for word. | — | 6 |
Search testingOsysharp.Memory.Testing | A deterministic, offline embedder for tests — a hashed bag of words — so a suite can assert what Memory.Search and [Searchable(Memory)] find without a model. | — | 6 |
Storage 1
| Kit | What it does | Builds on | Tests |
|---|---|---|---|
S3 and R2Osysharp.S3 | An app.BlobStore for S3-compatible object storage — AWS S3 and Cloudflare R2 — signed with SigV4. | — | — |
Documents 3
| Kit | What it does | Builds on | Tests |
|---|---|---|---|
PDF writerOsysharp.PdfWriterSource | Write a PDF — text in Helvetica, rules and pages — for receipts, invoices and slips. | — | 5 |
PDF viewerOsysharp.PdfSource | A paged PDF reader over a FileAsset, canvas-rendered, with a real text layer. | — | — |
Markdown editorOsysharp.MarkdownEditorSource | A rich EDITOR over a Markdown property: rich and source modes, tables, maths. | — | — |
UI 5
| Kit | What it does | Builds on | Tests |
|---|---|---|---|
ChartsOsysharp.ChartsSource | Charts in pure Osy#, no JavaScript: many mark types on one scale, plus pie and axes. | — | — |
Barcode scannerOsysharp.BarcodeSource | A live barcode + QR scanner: it owns the camera, decoding with ZXing. | — | — |
TranslationsOsysharp.Translations | A translator's desk: untranslated and stale words and data in every language, and overrides that survive a recompile. | — | 9 |
Flow canvasOsysharp.Flow | A node/edge modelling canvas: pan, zoom, drag, connect — nodes rendered by the app's own Osy#. | — | 3 |
Thinking orbsOsysharp.Orbs | Thinking orbs for waiting states — nine animated dotted spheres (searching, composing, weaving…) in pure Osy#, themed by tokens. | — | 39 |
Designs 1
A look is a site’s whole design — its frame, its pages, its theme and fonts — installed like a kit and picked per version of the site in the back office. Looks sit on two contracts, and the general one is here:
Osysharp.Shop.LooksOsysharp.Site.LooksSwitching a version’s look
- Changes
- The frame and every page, each block’s design, the theme, the fonts.
- Stays
- Orders, stock, customers — and every word and photograph staff placed, the menu, the strip and the footer: they are kept as the block’s type and its values, so the new look redraws them.
A block type the new look has no design for is drawn in the shop’s plain design. A block only the old look had waits in the arrangement — the back office lists it before the switch, and it comes back with that look.
Make your own look
- Start a kit in your own namespace whose
package.osyuses the site and shop contracts. - Declare
look Linen { … }and its theme: palette, type, corners. - Draw the 7 parts of a store — the frame, the front page, a listing, a piece’s page — and the block types you want in your own hand.
- Ship its fonts with
osy font add; add blocks only your look has. - Install it in your store, photograph every page with
osy test --pixels, and pick it in the back office.
| Kit | What it does | Builds on | Tests |
|---|---|---|---|
Site looks — the contractOsysharp.Site.Looks | The general site contract for looks — hero, picture with words, quote, opening hours, address, sign-up, gallery, announcement, footer — as block TYPES each look draws in its own design. | — | 8 |
Nothing matches. Try fewer words.
A kit’s description, what it builds on and its test count are read from the kit itself. Each kit’s name opens its page — its own README. Kits are ordinary source at version 0.x — complete as pieces, tested end to end, and still growing; read any line, override what you need, or take one over entirely.