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.
Platform · Web · mobile · PDF · email
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.
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.
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.
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.
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.
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.
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.
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.
Sign-in works natively, including single-sign-on and OAuth methods that redirect out to a provider and back into the app.
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.
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 thesaltcorn/capacitor-builder image — iOS requires a Mac with Xcode
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.
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.
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.
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.
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.
{{ }} interpolation of row and user data.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.
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.
Extend messaging with integrations to external platforms, so conversations can flow between your Saltcorn app and the channels your users already use.
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.
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.
The Saltcorn team can build your application and ship it to every surface your users are on.