Buttons, fields, dialogs, the data grid and four app shells, written in Osy#.
- Fields, choices, numbers, calendars and buttons
- Dialogs, overlays, feedback and empty states
- The data grid
- Sidebar, rail, tabbed and focused app shells
use Osysharp.Ui@3;
A package extends what an Osy# application can express and use: a control the screen can draw, a client for a model, entities whose rows live in a warehouse, a place to keep files, a way to send mail. An app names a package in its manifest with one use line, and the compiler resolves it like anything else the app declares. Where a package is written in Osy# and its source is published, the source is yours to read and fork.
User interface · Controls a screen can draw.
Buttons, fields, dialogs, the data grid and four app shells, written in Osy#.
use Osysharp.Ui@3;
Line, area, column, bar, scatter and candle charts over one shared value scale, plus pie and donut, written in Osy#.
use Osysharp.Charts@1;
A rich editor over a Markdown property: rich and source modes, an outline, tables, maths and diagrams.
use Osysharp.MarkdownEditor@1;
A paged PDF reader over a stored file, with fit, zoom and a real text layer, and a thumbnail that draws one page.
use Osysharp.PdfViewer@1;
A live camera scanner for QR codes and barcodes that tells your app what it read.
use Osysharp.BarcodeScanner@1;
Thinking orbs: small dotted spheres that say what a wait is for — searching, composing, translating, connecting — in your theme's ink.
use Osysharp.LoadingOrbs;
Colour maths for an app that lets people choose colours. Read a hex however it is typed, work in OKLCH — a colour space where equal steps look like equal steps — measure contrast the way WCAG does, nudge a colour until text in it can be read, and propose whole palettes, light and dark, from one base colour.
use Osysharp.Color;
Boxes joined by arrows — drawn for you as a clean picture, or moved, connected and laid out by the people who use your app, by mouse and by keyboard. Every node is drawn by a template you write in Osy#, and every node and edge is one of your app's own rows or values.
use Osysharp.Diagrams;
Models · Model clients and routing for the models an app declares.
The Anthropic Messages API as a model client, written in Osy#: register it on the models it serves and every call to them goes through it.
use Osysharp.Models.Anthropic@1 { egress "api.anthropic.com"; }
The OpenAI Chat Completions API as a model client, written in Osy#, and any endpoint that speaks the same wire.
use Osysharp.Models.OpenAi@1 { egress "api.openai.com"; }
The Google Gemini API as a model client, written in Osy#, tools included.
use Osysharp.Models.Gemini@1 { egress "generativelanguage.googleapis.com"; }
A cost-tiered model router: capability filters, a quality floor per kind of work, then the cheapest model that clears them.
use Osysharp.LlmRouter;
Call a model from your app — and know, for every call, which model served it, why that one, and what it cost.
use Osysharp.Llm@2;
Which language is this — and what does it say in mine? Language detection that works offline, and translation through your app's own model.
use Osysharp.MachineTranslation;
Data sources · Entities whose rows live in a warehouse, and exports back into it.
Databricks as a data source and an export destination: entities read from a SQL warehouse with ordinary LINQ, under the app's own rules, and changes merged into its tables.
use Osysharp.Warehouses.Databricks { egress "*.cloud.databricks.com"; secret "DatabricksToken"; }
Snowflake as a data source and an export destination: entities read from a warehouse with ordinary LINQ, under the app's own rules, and changes merged into its tables.
use Osysharp.Warehouses.Snowflake { egress "*.snowflakecomputing.com"; secret "SnowflakePrivateKey"; }
Spreadsheets in and out of an Osy# app — the product list a shop owner edits in Excel, the subscriber list they export, the stock count they paste back.
use Osysharp.Csv;
Mail, calendar and files through Microsoft Graph, from a class written entirely in Osy# over the public Http.* surface.
use Osysharp.MicrosoftGraph { egress "graph.microsoft.com"; secret "GraphToken"; }
Tell other systems, over HTTP, when something happens in your app. An administrator subscribes an endpoint to some of your app's events — "a bike is ready", "an order is paid" — and each time one happens the endpoint is sent a signed JSON document.
use Osysharp.Webhooks;
Storage · Where an app keeps its files.
An app.BlobStore for S3-compatible object storage, AWS S3 and Cloudflare R2, written in Osy# and signed with SigV4.
use Osysharp.S3@1 { egress "*.amazonaws.com"; secret "S3AccessKeyId"; secret "S3SecretAccessKey"; }
Email · Sending mail from the application.
Transactional email through Resend, written in Osy# over the Http surface: one message or a batch, text and HTML, replies and attachments.
use Osysharp.Resend { egress "api.resend.com"; }
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.
use Osysharp.EmailTemplates;
Mail an app sends — order confirmations, reset links, replies to a customer — through one call, whichever company carries it. The message is written in the same commit as whatever it is about, delivered after that commit, retried when the carrier is down, and held (kept, with the reason) when the app has no carrier yet — so an app works from its first minute, and nothing it meant to send is lost.
use Osysharp.Mail;
A Google Workspace or Gmail inbox as a mailbox your app reads and sends from — through the Gmail API, with your own Google credentials. Pair it with Osysharp.Mail.Receiving.
use Osysharp.Mail.Gmail { egress "gmail.googleapis.com"; }
Any IMAP mailbox — a hosting company's mail, a self-hosted server — as a mailbox your app reads (IMAP) and replies from (SMTP). Gmail and Microsoft 365 have their own packages that need no app password; this is the one for everything else. Pair it with Osysharp.Mail.Receiving.
use Osysharp.Mail.Imap;
A Microsoft 365 / Exchange Online mailbox as a mailbox your app reads and sends from — through Microsoft Graph, with your own app registration. Pair it with Osysharp.Mail.Receiving.
use Osysharp.Mail.Microsoft365 { egress "graph.microsoft.com"; }
Your app watches a mailbox — [email protected] in Google Workspace, Microsoft 365, or any IMAP account — and does something with every mail that arrives: opens a ticket, continues a conversation, files an invoice.
use Osysharp.Mail.Receiving;
Resend as the carrier for Osysharp.Mail: the app's outbox hands each message to Resend, with its Message-ID and threading headers, its attachments and its pictures, and records Resend's id for it.
use Osysharp.Mail.Resend { egress "api.resend.com"; }
Mailing lists any app can keep — a newsletter, an offers list, a changelog — done the way the law and the inbox providers expect:
use Osysharp.MailingLists;
Text messages · Sending text messages from the application.
The contract for 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.
use Osysharp.Sms;
46elks as a sender for the Sms contract — Nordic alphanumeric senders, EU-only handling, and a dry run for staging.
use Osysharp.Sms.FortySixElks { egress "api.46elks.com"; }
Send SMS through 46elks — one message or a fan-out, with delivery reports and a dry run — from a class written entirely in Osy# over the public Http.* surface.
use Osysharp.FortySixElks { egress "api.46elks.com"; }
Conversations · Talking with customers — one timeline across chat, email and text.
One conversation across channels: a single ordered timeline of messages, notes and events, with who may see each entry enforced by rules rather than a composer toggle.
use Osysharp.Conversations;
Email as a channel for Conversations: replies go through the Mail outbox from the address the customer wrote to, threaded, and a mail received continues its conversation.
use Osysharp.Conversations.Mail;
Support in every language, with the model you already have. Your team reads every customer message in its own language and writes in it; each customer reads the answer in theirs. The translation runs through your app's own model, with your key, router and budget — no translation service to sign up for, and no customer text sent anywhere your app does not already send it.
use Osysharp.Conversations.MachineTranslation;
Text messages as a channel for Osysharp.Conversations. A reply the desk writes on a conversation the customer started by text goes out through Osysharp.Sms's outbox — from the app's own number, the one the customer texted — and a text received becomes a message from that number, continuing the number's latest conversation if it moved within the window (seven days by default), or starting a new one.
use Osysharp.Conversations.Sms;
A knowledge base and the help centre it is read in. Your team writes answers in markdown, a second person reviews them before anyone else reads them, and each answer can have a version in every language you speak.
use Osysharp.KnowledgeBase@1;
Where a person writes a reply — on a ticket, a case, an order, a lead. The kit never knows which: a composer is pointed at a record by its id, and the app says once, in one class, what sending means for that kind of record.
use Osysharp.ReplyComposer;
Privacy · What the app holds about a person, and erasure that keeps only what it must.
What the app holds about a person, by category, and a request that erases what may go and keeps what must stay — restricted, for its purpose, until the right day — and says so.
use Osysharp.Privacy;
What your AI agents did for a person, and about a person, under that person's privacy request. Add it beside Osysharp.Agents and Osysharp.Privacy and every piece of agent work is part of what a person can see, have kept out of use, or have erased — and none of it is kept past its time.
use Osysharp.Privacy.Agents@1;
Who handed an inbox item to an AI agent — under their privacy request.
use Osysharp.Privacy.Agents.HumanRequests@1;
The people in an assignment, under their privacy requests — with the assignment left standing. Add it beside Osysharp.Assignments and Osysharp.Privacy, and the people *on* an assignment and the person an assignment is *about* can each see what is held, have it kept out of use, or have it erased.
use Osysharp.Privacy.Assignments@1;
The bookings Osysharp.ClassBookings holds about a person, as Osysharp.Privacy's holder — in their copy of their data, and erased when they ask.
use Osysharp.Privacy.ClassBookings;
What a support desk's conversations hold about a person, as Osysharp.Privacy's holder — which of it is erased when they ask, which is kept RESTRICTED for legal claims (out of use, read only for a claim, every read logged), and when each is gone for everyone.
use Osysharp.Privacy.Conversations;
What Osysharp.Guardianship holds about a person, as Osysharp.Privacy's holder — in their copy of their data, and erased when they ask.
use Osysharp.Privacy.Guardianship;
What was asked of a person — under their privacy request.
use Osysharp.Privacy.HumanRequests@1;
Osysharp.Privacy's holder for Osysharp.IncidentReports: the reports a person filed, every report naming them — with their injury, the care they were given and their statement — and what they were told about an incident.
use Osysharp.Privacy.IncidentReports;
Who wrote and who reviewed your help centre's articles, in their privacy requests. Add it beside Osysharp.KnowledgeBase and Osysharp.Privacy, and the articles and versions a person wrote or published, and the review steps they took, are part of what they can see, have kept out of use, or have erased.
use Osysharp.Privacy.KnowledgeBase;
The AI model calls made for a person, under that person's privacy request. Add it beside Osysharp.Llm and Osysharp.Privacy and the model meter's rows are part of what a person can see, have kept out of use, or be taken off — and a call stops being anybody's when its time is up.
use Osysharp.Privacy.Llm@1;
What an app's watched mailboxes hold about a person, as Osysharp.Privacy's holder — the mail they sent, as it arrived (ReceivedMail and its original), in their copy of their data, and erased when they ask.
use Osysharp.Privacy.MailReceiving;
Osysharp.Privacy's holder for Osysharp.Memberships: the memberships a person holds, the ones they are on, every change and every time they came or were turned away — counted in a privacy request's plan, in their copy of their data, and erased when they ask.
use Osysharp.Privacy.Memberships;
Osysharp.Privacy's holder for Osysharp.Notifications: what the app told a person in their bell, and how they asked to be mailed, under their privacy request — counted in every plan, in their copy of their data, kept restricted when they ask (Art. 18), erased when they ask.
use Osysharp.Privacy.Notifications;
Osysharp.Privacy's holder for Osysharp.OfferSales: the purchases a person made or had made for them — what, when, how it was paid, and what was given back. Counted in a privacy request's plan, in their copy of their data, and erased once the books no longer need it.
use Osysharp.Privacy.OfferSales;
Osysharp.Privacy's holder for Osysharp.PrepaidCredits: a person's packs, what they used them for and every change to them — counted in a privacy request's plan, in their copy of their data, and erased when they ask.
use Osysharp.Privacy.PrepaidCredits;
Osysharp.Privacy's holder for Osysharp.Qualifications: the qualifications a person holds, what they signed and on which text, and the files behind them — counted in a privacy request's plan, in their copy of their data, and erased when they ask.
use Osysharp.Privacy.Qualifications;
What a person answered when you asked how it went, in their privacy requests. Add it beside Osysharp.SatisfactionSurveys and Osysharp.Privacy and a person's questions and answers are part of what they can see, take with them, have kept out of use, or have erased. Nothing is wired: the holder is found by itself.
use Osysharp.Privacy.SatisfactionSurveys;
Osysharp.Privacy's holder for Osysharp.ShiftScheduling: the shifts a person was on, the time off they asked for, the hours they said they are not free and the cover they asked for — counted in a privacy request's plan, in their copy of their data, and erased when they ask.
use Osysharp.Privacy.ShiftScheduling;
The texts an app sent a person, as Osysharp.Privacy's holder — in their copy of their data, and erased when they ask.
use Osysharp.Privacy.Sms;
The step-up a person proves themselves with before asking about their own data, for an app that signs people in with Osysharp.UserAccounts and answers privacy requests with Osysharp.Privacy.
use Osysharp.Privacy.UserAccounts;
What a piece of work knows about a person, under that person's privacy request — each kind for its own time. Add it beside Osysharp.WorkRepositories and Osysharp.Privacy, and the items of an assignment's repository that are about a person are part of what they can see, have kept out of use, or have erased; and each kind of item is erased for everybody when its own period ends.
use Osysharp.Privacy.WorkRepositories@1;
Agents · AI agents with a job, an account of their own, a spending limit and a record of every step.
Give an AI agent a real job inside your app — and trust it with that job.
use Osysharp.Agents@1;
An agent's proposals and questions, in the inbox of the person they are for — and their answer carried back to the work that waits for it.
use Osysharp.Agents.HumanRequests@1;
One piece of an AI agent's work, on one page, readable by a person who was not there.
use Osysharp.Agents.Inspector@2;
The place a person runs an app's AI agents from: every agent, all their work, everybody they are waiting on, the standing rules that let them do more alone, what they cost, and who may do what.
use Osysharp.Agents.Management@2;
An AI agent's work as a step of a business process — seen from the process, and from the work.
use Osysharp.Agents.Processes@1;
The two places people teach an AI agent, drawn: Correct this on a piece of its work, and the agent's Instructions page.
use Osysharp.Agents.Teaching@1;
Test an agent without a model: write what the model answers, turn by turn, and assert what the agent then did.
use Osysharp.Agents.Testing@1;
An agent's work, attached to the assignment it is for.
use Osysharp.Assignments.Agents@1;
Test search by meaning without a model. A deterministic, offline embedder for your test suite, so you can assert what Memory.Search and [Searchable(Memory)] find — and, just as important, what they never find.
use Osysharp.Memory.Testing;
What an agent finds lands in the assignment's repository as items — not as lines of a trace.
use Osysharp.WorkRepositories.Agents@1;
Work & processes · Queues, requests to people, processes that wait for days, and work owned until it is done.
A piece of work somebody asked for, owned until its outcome is reached.
use Osysharp.Assignments@2;
What several assignments compete for — and who holds how much of it.
use Osysharp.Assignments.Allocations@1;
What an assignment asks of people — in their inboxes, and on the assignment.
use Osysharp.Assignments.WorkQueues@1;
Rules that do an app's routine work when something happens — "when a customer writes on a solved ticket, set it Open and tell whoever holds it"; "when a job has waited two days in Ready, label it uncollected".
use Osysharp.Automations;
Fields your admins add to your records without a release: an order number on a support request, the industry of a company, the dietary needs of a guest. Each one is text, a number, yes or no, one of a list, or a date.
use Osysharp.CustomFields@1;
Put something to a person, and get their answer back, however long it takes.
use Osysharp.HumanRequests@1;
What a business process asks of people — told on the process's own run.
use Osysharp.HumanRequests.Processes@1;
Confidential incident reports, from the moment something happens to the day it is closed. An injury, a near miss, damage, a safeguarding concern — for a camp, a school, a club, a venue, a workshop, a care home, a building site.
use Osysharp.IncidentReports;
The people who look after somebody are the ones told when they are named in an incident. In an app using Osysharp.IncidentReports and Osysharp.Guardianship, a child's guardians — acting for them or kept informed, not one whose link has ended — are offered on the review desk ("Tell Maya Ortiz"), told in one call (InformContacts), read what they were told and acknowledge it.
use Osysharp.IncidentReports.Guardianship;
Telling a person that something needs them. A bell beside their name with a live count and a list behind it — read and unread, All / Unread, "Mark all read", each row opening where it happened — and, for what they did not see in the app, a mail: a daily digest, or a mention at once.
use Osysharp.Notifications@1;
Every run of a business process, findable and readable by somebody who was not there.
use Osysharp.Processes@1;
What happened to a record, on its own timeline. Every event your app and its kits raise about a record becomes a line on it, said in the reader's words. A record that others roll up to shows what happened to them too, so an opportunity's timeline carries its quotes'.
use Osysharp.RecordTimeline;
Reports your team builds for itself, and the overview it opens every morning. Start from one thing your app keeps (an order, a ticket, a candidate), pick fields by following its relations (Order › Café › Region), group, measure and filter, and read the answer as figures, a table and a chart.
use Osysharp.Reports@1;
Ask the person a piece of work was for how it went. One question, good or bad, with room for a comment. They answer from the mail with one click and no account, or signed in on the work's own page. Each person has one answer per piece of work, held by the database, and can change their mind for a while after.
use Osysharp.SatisfactionSurveys;
Work queues, who holds what, and the service levels promised on it — over any item: a ticket, an approval, a candidacy, a lead, a return, an alert.
use Osysharp.WorkQueues@1;
The people Osysharp.WorkQueues says should know, told in their Osysharp.Notifications bell: the one an item is offered to, the cover it is handed to while its holder is away, whoever holds it when its policy says a promise is at risk or missed, and a queue's leads when nobody picks an item up.
use Osysharp.WorkQueues.Notifications;
What your team's inbox did, as reports: how much came in, how much was done, how soon the first reply came and how long finishing took (the median and the slowest tenth), what stands open now, and how many promises were kept.
use Osysharp.WorkQueues.Reports;
What an assignment knows, kept as items: the evidence, the correspondence, the findings, the documents and the decisions — each with who or what added it, when, and from where.
use Osysharp.WorkRepositories@1;
People & accounts · Sign-in, accounts, organisations, roles, and what people hold and are scheduled for.
Authenticate and sign with BankID — animated QR for another device, autostart for the same one — from classes written entirely in Osy# over the public Http.* surface.
use Osysharp.BankId { egress "appapi2.bankid.com"; }
Classes, courses and lessons that people book a place in — never overbooked, with a waiting list, a register at the door, and the rules a studio actually runs by.
use Osysharp.ClassBookings;
Who acts for whom — the adults who look after a child (or anyone who needs someone to act for them), what each of them may do, and what they have agreed to on the child's behalf.
use Osysharp.Guardianship;
Who signs in to an app, and which of the app's roles each of them holds — the two types every kit that knows about people builds on. With them in one place, a sign-in kit, an invitations kit and a user manager all mean the same person, whichever of them the app uses.
use Osysharp.Identity;
Bring a person into an app by their address, with what they will be — a role, and optionally the organisation they hold it in — fixed when the invitation is sent. Mailed, reminded, lapsing, revocable and resendable, as a durable run.
use Osysharp.Invitations@2;
The groups people belong to — the companies an app's customers work for, and the teams its own people are in: who belongs to which, the roles they hold there, and the mail domains that put a newcomer in the right company.
use Osysharp.Organizations;
The service each organisation you serve gets: the tier it is on, what it is entitled to, the account team that looks after it, and its VIP people. Your support, sales or success kits route and promise by them. Only your own people set them, never the organisation's.
use Osysharp.Organizations.ServicePlans;
Who else is on a record right now, and the sentence that names whoever moved it first.
use Osysharp.Presence;
What a person holds that lets them do something — a licence, a certificate, an induction, a background check, a signed waiver. For boat and equipment hire, workshops, clinics, venues, contractors on site, volunteers. (Not sign-in: that is Osysharp.UserAccounts.)
use Osysharp.Qualifications;
A staff rota. Who works when — for a café, a clinic, a shop floor, a venue, a warehouse, a volunteer team.
use Osysharp.ShiftScheduling;
A rota position's requirements answered by the qualifications people hold. In an app using Osysharp.ShiftScheduling and Osysharp.Qualifications, a position requiring first-aid refuses anybody whose first aid certificate does not hold on the day of the shift, in the qualifications kit's own words: *First aid post needs a first aid certificate: First aid certificate expired on 5 July 2026.*
use Osysharp.ShiftScheduling.Qualifications;
Sign-in for a business app, done properly once. Every app that people sign in to needs the same things: sign in, sign up (or not — some apps are invitation-only), a forgotten password, a changed password, a changed address, and proof that an address is really theirs.
use Osysharp.UserAccounts@1;
The user manager: who is in the app, what each of them may do, and who changed that — when, and why.
use Osysharp.UserManagement;
Commerce · Selling: a shop, payments, offers, memberships, shipping and the books.
A shop's books, from what the shop already records: every invoice is a sale and every credit note a sale given back. An add-on to Osysharp.Shop: use it, and the books page stands in the store's desk and the accountant gets a file.
use Osysharp.Shop.Bookkeeping;
Discount codes for Osysharp.Shop: percent off, an amount off, or free delivery, with a minimum spend, an end date, a limit in all and a limit per customer. An add-on — list it, put the code field in your checkout and the list on your desk, and the shop prices every code with the basket.
use Osysharp.Shop.Discounts;
Take payment through Klarna — a session, an order, and the capture and refund half that comes after — from classes written entirely in Osy# over the public Http.* surface.
use Osysharp.Payments.Klarna { egress "api.klarna.com"; }
What lets a person in. Day tickets, weekly and monthly memberships, yearly passes, cards of ten visits, family memberships — for a pool, a studio, a museum, a co-working space, a club.
use Osysharp.Memberships;
Sell a few simple offers, online or across a counter. A day ticket, a guided tour with a few places, a ten-visit card, a monthly membership, a workshop seat — for a museum, a pool, a studio, a school, a venue, a club.
use Osysharp.OfferSales@1;
A membership plan is something Osysharp.OfferSales sells: a day ticket, a monthly desk, a yearly pass, a card of visits. Once a purchase is paid — online, by transfer or invoice marked received, or at the counter — the membership is sold to whoever it was bought for, at what was paid, once, however often the payment is reported.
use Osysharp.OfferSales.Memberships;
A pack of prepaid credits is something Osysharp.OfferSales sells: a ten-class card, five hours of studio time. Once a purchase is paid — online, by transfer marked received, or at the counter — the pack is granted to whoever it was bought for, once, however often the payment is reported.
use Osysharp.OfferSales.PrepaidCredits;
the payment-provider contract — start, confirm, capture, refund, cancel and webhook events — plus manual payment.
use Osysharp.Payments;
PostNord parcels — booking with a PDF label, track & trace, service points, and a delivery provider.
use Osysharp.Carriers.PostNord;
Prepaid uses, kept as a ledger. A class pack, a ten-visit card, a bundle of machine hours, prepaid lessons, print credits: anything sold — or given — as a number of uses.
use Osysharp.PrepaidCredits;
Product reviews for Osysharp.Shop: written by customers who bought the product, read by staff before they go up, averaged on the product page and in what a search engine reads. An add-on — list it, put the panel on your product page and the desk list on a staff page.
use Osysharp.Shop.Reviews;
Many European carriers behind one integration — DHL, DPD, GLS, UPS, PostNL, Colissimo and more — through Sendcloud's API v3. A delivery provider under Osysharp.Shipping, so a shop lists it beside any other way to deliver.
use Osysharp.Carriers.Sendcloud { egress "panel.sendcloud.sc"; }
the delivery contract — quote, ship, track and carrier events — plus flat-rate delivery and collection.
use Osysharp.Shipping;
US carriers — USPS, UPS, FedEx, DHL Express — and more through Shippo, as a delivery provider under Osysharp.Shipping. The US counterpart of Osysharp.Carriers.Sendcloud.
use Osysharp.Carriers.Shippo@1 { egress "api.goshippo.com"; }
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.UserAccounts.
use Osysharp.Shop@1 { egress "api.resend.com"; secret "ResendApiKey"; }
The shop's age check (Osysharp.Shop's AgeVerifier) over BankID. A buyer of wine — or of anything with Product.MinimumAge — identifies with BankID instead of typing a date of birth, and the shop learns that they are old enough. Nothing else it keeps.
use Osysharp.Shop.AgeCheck.BankId;
the shop's agents: a description writer that drafts a product's description from its details when staff ask, offered in the product editor to change and save — never used by itself; it holds no tools, reads only what the asking staff member reads, is off until staff switch it on, and may spend 5 cents a draft.
use Osysharp.Shop.Agents@1;
the European Central Bank's daily reference rates, for showing a visitor prices in their own currency.
use Osysharp.Shop.ExchangeRates { egress "www.ecb.europa.eu"; }
EU VAT-number checks against VIES — the shop's reverse-charge check.
use Osysharp.Shop.VatNumbers { egress "ec.europa.eu"; }
Take money through Stripe — hosted Checkout or your own card form, customers, refunds, and verified webhooks — from classes written entirely in Osy# over the public Http.* surface.
use Osysharp.Payments.Stripe { egress "api.stripe.com"; }
Selling on a cadence, for software and for goods alike — an add-on to Osysharp.Shop.
use Osysharp.Shop.Subscriptions;
Take payment with Swish, the phone payment nearly every Swede has: the customer approves in the Swish app with BankID, and the money is in the shop's bank account in seconds. Payment requests, the status that follows them, the QR code a computer shows and the link a phone opens, and refunds, written entirely in Osy# over the public Http.* surface.
use Osysharp.Payments.Swish { egress "cpc.getswish.net"; }
Sites & looks · Pages, looks and what a public site needs around them.
a translator's desk: untranslated and stale words and data in every language, and overrides that survive a recompile.
use Osysharp.Localization;
A look for shops: draws Osysharp.Site.Looks and Osysharp.Shop.Looks. Its own design of all seven parts of a store (the frame and the pages) and of the hero, the footer's words, the product row and the shelves; the other block types fall back to the shop kit's plain designs, in this look's theme.
use Osysharp.Shop.Looks.Atelier;
A look for shops: draws Osysharp.Site.Looks and Osysharp.Shop.Looks. Its own design of all seven parts of a store (the frame and the pages) and of the hero, the product row and the shelves; the other block types fall back to the shop kit's plain designs, in this look's theme.
use Osysharp.Shop.Looks.Boutique;
A look for shops: draws Osysharp.Site.Looks and Osysharp.Shop.Looks. Its own design of all seven parts of a store (the frame and the pages) and of the hero, the footer's words and the product row; the other block types fall back to the shop kit's plain designs, in this look's theme. Its own block: “Every piece”.
use Osysharp.Shop.Looks.Drop;
A look for shops: draws Osysharp.Site.Looks and Osysharp.Shop.Looks. Its own design of all seven parts of a store (the frame and the pages) and of the hero, the footer's words and the product row; the other block types fall back to the shop kit's plain designs, in this look's theme.
use Osysharp.Shop.Looks.Fitting;
A look for shops: draws Osysharp.Site.Looks and Osysharp.Shop.Looks. Its own design of all seven parts of a store (the frame and the pages) and of the hero, the footer's words and the product row; the other block types fall back to the shop kit's plain designs, in this look's theme. Its own block: “Every piece”.
use Osysharp.Shop.Looks.Index;
A look for shops: draws Osysharp.Site.Looks and Osysharp.Shop.Looks. Its own design of all seven parts of a store (the frame and the pages) and of the hero, the footer's words, the product row and the shelves; the other block types fall back to the shop kit's plain designs, in this look's theme.
use Osysharp.Shop.Looks.Kiosk;
A look for shops: draws Osysharp.Site.Looks and Osysharp.Shop.Looks. Its own design of all seven parts of a store (the frame and the pages) and of the hero, the footer's words and the product row; the other block types fall back to the shop kit's plain designs, in this look's theme. Its own block: “Every piece”.
use Osysharp.Shop.Looks.Loud;
A look for shops: draws Osysharp.Site.Looks and Osysharp.Shop.Looks. Its own design of all seven parts of a store (the frame and the pages) and of the hero, the product row and the shelves; the other block types fall back to the shop kit's plain designs, in this look's theme. Its own block: “How a piece gets here”.
use Osysharp.Shop.Looks.Rail;
A look for shops: draws Osysharp.Site.Looks and Osysharp.Shop.Looks. Its own design of all seven parts of a store (the frame and the pages) and of the hero, the footer's words and the product row; the other block types fall back to the shop kit's plain designs, in this look's theme.
use Osysharp.Shop.Looks.Studio;
A look for shops: draws Osysharp.Site.Looks and Osysharp.Shop.Looks. Its own design of all seven parts of a store (the frame and the pages) and of the hero, the footer's words and the product row; the other block types fall back to the shop kit's plain designs, in this look's theme. Its own block: “Every piece”.
use Osysharp.Shop.Looks.Swap;
The desk where the people who run a site arrange its pages. The app's code declares blocks ([Block] component …) and regions (Region("front", allow: [...]) { … }) with Osysharp.Blocks; this kit is where staff add, move, fill in and take out blocks in those regions — beside the live page at phone and desk width — keep their changes as a draft, and publish.
use Osysharp.PageBuilder@1;
schema.org structured data for a page's head: what a search engine reads to show a product's price and stock, a breadcrumb trail, or a site's name and logo beside a link. Each class writes its own JSON-LD, including @context and @type, and each is a JsonLd block, so head { StructuredData = … } takes it directly.
use Osysharp.Seo;
The general site contract for looks — the block TYPES any consumer-facing site has, as a shape and nothing more: what a hero, a quote or the footer's words hold, never how they look.
use Osysharp.Site.Looks;
Seven finished designs for any app built on the UI kit, each a start for one or more categories of app (osy kit looks <category>: shop, booking, internal-tool, content-site, dashboard). Each is a whole look — the palette in light and dark, the faces it ships, the density, the corners, the elevation and the colours of the app's chrome — and each is a base: your app derives from the closest one and makes it its own.
use Osysharp.Ui.Looks;
Web analytics for an Osy# app: Plausible or Google Analytics 4, page views on every route change, the e-commerce events both understand (view_item, add_to_cart, begin_checkout, purchase — GA4's names), and the consent GA4 needs in the EU before it may track.
use Osysharp.WebAnalytics;
More packages · Everything else an app can add.
The app's audit log, as a page of its settings. Every change the platform's change trail holds that the reader may read: what kind of record, which one, what happened to it, each field from what to what, who made it and when. Newest first, narrowed by period, by kind of record and by person.
use Osysharp.AuditLog;
DNS records an app writes, through whichever company hosts the zone. You get one record shape, a provider interface, an app setting naming the provider, and a provider that keeps records in the app's own table. Use that last one for tests, for a local machine, and to read what a real provider would be asked for.
use Osysharp.Dns;
Cloudflare DNS as an Osysharp.Dns provider. It is written in Osy# over Http.*, and it can reach only api.cloudflare.com.
use Osysharp.Dns.Cloudflare { egress "api.cloudflare.com"; }
write a PDF — text in Helvetica, rules and pages — for receipts, invoices and slips.
use Osysharp.PdfWriter;
One app tells another about the problems it sees, and the other follows each one to the end. A reporter — a system that watches something: its failed jobs, its alerts, its errors — names each problem by a key of its own and sends it whole, as it now is, each time it moves.
use Osysharp.ProblemReports;
The reporting side of Osysharp.ProblemReports: an app tells a receiver — a help desk, a bug tracker, an on-call board — about the problems it sees. The wire (the report, its steps, the receipt) and the receiving side are in Osysharp.ProblemReports; this kit adds what only a reporter needs: the receiver's host, the secret ProblemReceiverKey, and a delivery log.
use Osysharp.ProblemReports.Sending { secret "ProblemReceiverKey"; }
Search that understands word endings. A Swedish reader who types "betalningen" finds the article about "betalningar"; an Arabic reader's "بالبطاقة" finds "البطاقات". Words are put in their base form, per language, on both sides of a search.
use Osysharp.Stemming;
One answer to "what day is it here?" for your whole app. Staff pick the time zone the team's days start in, and the day a week starts, from a list on one settings page. Everything that counts in days reads it: reports start "today", "this week" and "this month" at midnight there, and the daily digest goes out in the team's morning, in summer time as in winter.
use Osysharp.TimeZone;
How package versions work
The number after @ is the major version. An app takes the newest release within that major and never crosses into the next major on its own; @2.3 is a minor floor and @2.4.1 an exact pin. osy lock resolves the package and pins its content address in osyrin.lock, so a build with a lock and a warm cache touches no network. Pinning a kit version says how; package.osy is the manifest a package publishes.
Platform capabilities
useA capability changes the shape of an app: a vector store, a workflow runtime, audit tables. It ships with the platform and rides its version, so it carries no @; pinning one is a compile error. A capability that is part of your app puts its tables in your database, and osy model reports that cost per capability. An app that declares none carries two tables.
| capability | what it is | arrives | |
|---|---|---|---|
use Osysharp.Workflow; | The durable workflow runtime: runs, steps, slots, and the trail they leave. | chosen | Reference → |
use Osysharp.Memory; | The vector store behind `[Searchable]` and `Memory.Search`. | chosen | Reference → |
use Osysharp.Storage; | File and image assets — addressable, grantable, quota-counted and deduped by content hash. | chosen | Reference → |
use Osysharp.Markdown; | Section-addressable storage for `Markdown` properties. | chosen | Reference → |
use Osysharp.Http; | The dynamic HTTP egress facade `Http.*` over the platform's SSRF-guarded outbound chokepoint. | chosen | Reference → |
use Osysharp.Observability; | The data-change and data-access audit trail. | chosen | |
use Osysharp.Scheduling; | Recurring schedules: rules, exclusions, and the occurrences they produce. | chosen | |
use Osysharp.Oauth; | The per-user OAuth link — a connection a person authorizes once and the app then acts through. | chosen | |
use Osysharp.Images; | The image-transform surface `Image.*` — thumbnail, resize and convert over stored file assets. | chosen | |
use Osysharp.SourceBudget; | The warehouse time one person may spend in a day. | chosen | |
use Osysharp.Locale; | Time zones and culture packs, as a read-only reflection surface. | chosen | |
use Osysharp.Sources; | The entity-source seam — IEntitySource, the query plan a provider translates, and what it hands back. | with a data-source package | |
use Osysharp.Exports; | The export-sink seam — IExportSink, and the schema and batches of changes a sink receives. | with a data-source package | |
use Osysharp.Counters; | Where a global counter keeps the number it has reached. | with a Counter you declare | |
use Osysharp.Secrets; | Where a declared secret's sealed value is kept. | with app.Secrets | |
use Osysharp.Translatable; | Where a [Translatable] member keeps its translation per language. | with a [Translatable] member | Reference → |
The summaries are each capability's own manifest, read when this page was built. The use reference explains what a dependency does, and what is carried regardless.