Build apps for Pulsar
An app is your website plus a pack: one small JSON file that gives your site its own icon, window, login and settings in Pulsar. People install it from your site or from Pulsar’s Apps directory, with no warnings.
What an app is
The pack says which domains are the app, how it looks (icon, colours, its own window or a tab) and what Pulsar adds inside it: CSS and JS, a settings page, share targets and request headers. Your site stays your site; the pack only changes how Pulsar shows it.
- It opens in App mode: its own window with a slim top bar in your colour, and its own icon on the home screen.
- It has its own cookies, storage and login, apart from the browser and every other app.
- Its settings are drawn by Pulsar, like an extension’s, in light and dark.
- People can share a link or text from any Android app straight into it.
- It updates the moment you publish a new pack. No app store release, nothing for people to download.
Why it installs with no warning
Pulsar decides what an app can do, not the pack. That is why the install sheet has no permission list: there is nothing to warn about.
- Your CSS and JS run only on the app’s own domains, and only inside the app. A normal tab on the same site never sees them.
- The app can’t see other sites or tabs. Links to other sites open in a normal Pulsar tab, without the app’s cookies.
- It never draws its own screens over Pulsar. Its settings are a JSON description Pulsar draws.
- It can’t install extensions or use Pulsar’s engines without the usual questions. Safe Browsing and HTTPS-only apply as in any tab.
- Pulsar can switch any app off for everyone at once (the kill switch), also apps installed from other websites.
Apps or extensions?
| App | Extension | |
|---|---|---|
| Changes | Your own site only | Any site, or every site |
| Made of | One JSON pack (with CSS and JS inside) | A WebExtension: manifest, scripts, pages |
| Runs | Only inside the app’s window or tab | In every tab where it is on |
| Installs | From your site or the Apps directory, no warnings | From the Pulsar Store or a signed file, with its permissions shown |
| Signing | None (website) or Pulsar’s seal (directory) | Mozilla signature, plus Pulsar’s seal on the Store |
| Updates | At once, when you publish a new pack | Daily, after review |
| Own window and icon | Yes | No |
| Pulsar API, background jobs, engines | No | Yes |
- Pick an app when you own the site and want it to feel like an app on the phone: its own icon, window and login, a few settings, links shared to it.
- Pick an extension when you want to change other people’s sites, work across sites, run in the background or use the Pulsar API.
Quick start in 6 steps
- Download the App starter
A complete pack for a made-up recipe site, Example Kitchen: settings, CSS and JS that follow them, request headers, share targets, a build script and an install button. Download pulsar-app-starter.zip.
- Make it yours
In
pack.src.json, change theid, thenameand everyexample.comto your own site. Write your CSS inapp.cssand your JS inapp.js. - Build and check
The build puts the CSS and JS into
pack.jsonand checks it with Pulsar’s strict rules.Terminal node build.mjs - Test on a staging host
Make a test copy for a host you own, upload it there with the install button and install it in Pulsar on your phone.
Terminal node build.mjs --domain staging.example.com - Offer it on your site
Upload
pack.jsonas/pulsar-app.json, add<link rel="pulsar-app">and the button. See Publish an app. - Ask for the directory
Send us your pack’s address. A person checks it; listed apps carry Pulsar’s seal and show “Verified by Pulsar”.
Download
Needs Node 18 or newer for the build. Nothing to install; everything is free to use for your own apps.
The Apps docs
when conditions, run timing, request headers and good practices.Settings and sharingSettings, share targets, App mode, cookies, navigation and storage.Publish an appThe install button, the directory, updates, the kill switch and a checklist.