Platform · Web · mobile · PDF · email

One application, every surface.

Build once. The same views and pages become a responsive web app, a native iOS and Android app, PDF and image documents, responsive email, and real-time chat — all driven by the same data. No second codebase, no re-design.

Web · mobile · PDF · email · chat One data model · one view system
· Build once, works everywhere

Five outputs, one source of truth.

A Saltcorn view is a description of an interface onto your data — not markup tied to a browser. That's what lets the same view render as a web page, a screen in a native app, a page of a PDF, the body of an email, or a live chat panel, without you rebuilding it for each.

Web Responsive, server-rendered, live-updating.
Mobile Native iOS & Android, offline-capable.
PDF & image Any page or view as PDF, PNG or JPEG.
Email Your views as responsive messages.
Chat Real-time messaging between users.
01 / Web

Fast in every browser, by default.

The default Saltcorn deployment is a responsive, server-rendered web application that runs in every modern browser — fast because pages are rendered on the server against a low-latency database, with progressive enhancement and real-time live updates rather than a heavy single-page client.

It scales cleanly from phone to widescreen. And because a view's state lives in the URL, every filtered or drilled-down screen is a shareable, bookmarkable address — which also makes pages SEO-friendly, with legible URLs and adjustable page titles.

Responsive Server-rendered Live updates Shareable URLs SEO-friendly
A Saltcorn application rendered as a responsive web interface, built and edited in the drag-and-drop builder
Every application ships first as a responsive web app — the same views you build in the drag-and-drop builder.
02 / Native mobile

Ship an iOS & Android app — no native code.

From Settings → Mobile app an administrator fills in a build form — entry point (optionally per user role), target platform(s), app name, icon, splash screen, and which plugins and themes to include — and Saltcorn produces an installable package (.apk/.aab or .ipa) ready to publish to the App Store and Google Play, or sideload for testing.

Offline mode

Works with no signal

Data for selected tables is copied into a local SQLite database on the phone, so users keep reading and editing while disconnected — you choose per table what lives on the device.

Synchronization

Reconciles automatically

Offline changes sync back to the server when the device reconnects, when the app resumes, on a background timer, or when the server pushes a "please sync" signal.

Push notifications

Reach users on device

Send native push through Firebase on Android and APNs on iOS — driven by the same triggers and workflows that run the rest of your app.

Share-to

Accept from other apps

Your app can appear in the operating system's Share sheet, so users send content — a photo, a link, a document — straight from another app into yours.

Native login

SSO that comes back home

Sign-in works natively, including single-sign-on and OAuth methods that redirect out to a provider and back into the app.

Distribution

Publish, or sideload

The finished package lands in the server's mobile_app folder, ready for the App Store and Google Play — opening a new channel to reach and, if you choose, monetise your users.

· Why it works offline
The app doesn't point a browser at your server. The Saltcorn engine itself runs on the phone — the same data and markup code that renders your views on the server, bundled into the app and executing on the device.

A Saltcorn mobile app is a Capacitor shell wrapped around that engine and a local SQLite database — effectively "a Saltcorn server in the browser." Navigation is handled on the device rather than over the network, which is exactly what makes true offline operation possible: when online it calls back to the server's API, and when offline it reads and writes the local database and reconciles later.

Build locally or in Docker Builds run on the server with the platform toolchains, or inside the saltcorn/capacitor-builder image — iOS requires a Mac with Xcode
03 / PDF & image documents

Turn any page into a document.

With the page-to-pdf plugin, any page or view can be rendered as a PDF, PNG or JPEG. It supplies an action you attach to a button, a trigger, or a workflow step — so a document can be generated on demand or as part of an automated process.

From your own layouts

Pixel-accurate output

Documents are produced from the layouts you already built — including conditional text, joined data and charts — so you get personalised invoices, certificates, official reports and statements without a separate template system.

PDF · PNG · JPEG

Documents or images

Produce a multi-page PDF for a report, or a PNG / JPEG snapshot of a view for a thumbnail, a share card, or an image attachment — from the very same action.

How it renders

Real browser fidelity

The plugin renders through a headless Chromium browser, so output matches what you see on screen. It's a store plugin — install it when you need it; it just needs Chrome/Chromium available on the server.

04 / Email

Your views become your emails.

Send email straight from your application — both system emails like address verification and password resets, and application emails you design and trigger from your own logic with the Send email action on a trigger or workflow step.

The most powerful option renders one of your views as the message body, so it reuses a layout you already designed and comes out as responsive, email-client-friendly HTML — compiled through MJML for broad compatibility. Because emails are built from your existing views, they automatically match your app's look and adapt to the recipient's screen, with no hand-coded HTML.

SMTP OAuth2 Microsoft 365 · Graph MJML-rendered

Inside the Send email action

RecipientsA fixed address, the current user, or a field on the row — plus cc and bcc.
SubjectStatic text or a formula, with {{ }} interpolation of row and user data.
BodyA rendered view, or a text, HTML or MJML field on the row.
AttachmentsFiles from a File field on the row, or from related rows.
Language overrideSend each message in the recipient's own language.
"Only if" & confirmationA send condition, and a field to record that sending succeeded.
05 / Real-time chat

Messaging that appears instantly.

Built-in low-latency chat between application users, displayed instantly across browsers and mobile apps — over the same websocket connection Saltcorn uses for real-time collaboration and live-updating views.

Built with the builder

Chat is just a view

Chat layouts are designed in the drag-and-drop builder like any other view — so a conversation panel drops into a page beside the data it's about.

Beyond your app

Reach external platforms

Extend messaging with integrations to external platforms, so conversations can flow between your Saltcorn app and the channels your users already use.

06 / Internationalization

Translate the whole surface

InterfaceThe built application UI and navigation.
LabelsForm and field labels across your views.
ContentDatabase content itself, not just the chrome.
EmailA per-message language override on every send.

One app, many languages.

Ship a single application to a multilingual audience: the interface, form and field labels, and database content can all be translated.

And it carries across surfaces — because email supports a per-message language override, the same translated content reaches each recipient in their own language, whether they read it on the web, in the mobile app, or in their inbox.

Next in the platform
Try it now

Build it once. Ship it everywhere.

Spin up Saltcorn and turn one application into a web app, a native mobile app, PDF documents and email in minutes — free, open-source, one data model underneath.

Want a hand?

Build it with us.

The Saltcorn team can build your application and ship it to every surface your users are on.

Contact us