Self-hosting
Self-hosting
Snowfox Notes on your web space.
You don’t need your own server, just ordinary PHP web hosting. No SSH, no Docker, no command line.
Step 0
What you need
Snowfox Notes runs on ordinary PHP web hosting – the kind most providers sell for websites. You don’t need a separate database: your notes live in a SQLite file on your web space, with images, attachments and PDFs as files next to it.
No cron job, no queue and no mail server either. The app does its housekeeping on the side, while it’s being used. It only sends e-mails if you enter an SMTP account.
Only one thing depends on the clock: for reminders to arrive on time and backups to run at night, something has to wake the server every few minutes. If your web space has no cron, add the secret timer address from Settings → System to a free service such as cron-job.org. Without that, it only happens while someone is working with Snowfox.
-
PHP 8.4.1 or newer
Older versions won’t work – every request would end in an error 500. With most providers you switch the PHP version per domain in your customer menu.
-
PHP extensions
Required:
pdo_sqlite,mbstring,openssl,fileinfo,ctype,tokenizerandxml. Recommended:zipandcurl– withzipyou install updates from the settings and import ZIP backups, and the app usescurlfor outside connections.Nice to have, not a must: SQLite full-text search (FTS5). Without it, the app falls back to a slower search.
-
Write access
PHP must be able to write to
storage/,bootstrap/cache/anddatabase/(permissions 775). To install updates from the settings, PHP also needs write access to the program folder. -
HTTPS
Strongly recommended. Without HTTPS, your password and notes travel through the network in plain text – and offline mode, the installable app and push only work over HTTPS.
-
Apache with .htaccess
The package comes with
.htaccessfiles that route every request to the right place and lock the folders with program code and data.
Installation
Your own instance in three steps
-
Download the package
Download
snowfox-notes-release.zip.The package contains everything the app needs. Only the database is missing; it’s created on the first visit.
The steps are also in the file UPDATE.txt in the package.
-
Upload
Unzip it and upload the contents via FTP – to the root of your domain or to a subfolder. Many providers can also unzip right in their file manager; then you upload just the one file.
Next, set the permissions of
storage/,bootstrap/cache/anddatabase/to 775 – in most FTP programs under “file attributes”.Ideally, your domain’s web folder points straight at the public/ folder. If your provider doesn’t allow that, the included .htaccess forwards everything there.
-
Open
Open the check page first (see below). Once everything is ready, visit the address of your installation in your browser. The database sets itself up.
Then you create your first account: a name, a password (at least 8 characters) and the access code. Each instance rolls its own code; you’ll find it via FTP in
storage/app/private/setup-code.txtuntil the first account exists. This first account is automatically an admin.Why an access code for the very first account? Otherwise the instance would belong to whoever came by first.
Check page
Know upfront whether your hosting is ready
Before you open the app for the first time, the built-in check page tells you whether everything is in place. You’ll find it at /public/check.php – or at /check.php if your domain points straight at the public/ folder.
The page deliberately works without the app itself. That way it can still explain what’s missing when the app would only show a blank page or an “error 500”.
-
What it checks
- the PHP version (8.4.1 or newer)
- the required extensions – and recommended ones such as
zipand full-text search - write access to the folders under
storage/,bootstrap/cache/anddatabase/ - upload limits – large files still get through, in 2 MB chunks
- whether you’ll be able to install updates from the settings
- whether the configuration file
.envis there - whether the connection is encrypted
-
What to do with the result
Fix anything marked red and reload the page. Notes such as missing full-text search are no obstacle. Once everything is ready, the page takes you straight to the app.
-
After setup
Once setup is complete, the check page shows nothing except exactly that.
HTTPS
Encrypted – and then for good
Set up a certificate for your domain with your provider (often called “SSL”) and open Snowfox Notes via https://.
Once the app has been opened over HTTPS, it automatically redirects unencrypted requests there and asks the browser to only open it encrypted from now on (HSTS). Deliberately only after that first visit: this way there can’t be a redirect loop with providers that end HTTPS before PHP.
You also need HTTPS to add Snowfox Notes to your home screen and to work offline. If your instance runs without HTTPS, the app points this out in the settings.
Updates
Installing updates – and going back to the previous version
You install new versions right inside the app, no FTP needed. That works if PHP may change the program folder and the zip extension is available – the check page tells you whether it does.
Tip: download the ZIP backup before every update. The update only keeps the previous program version, not a copy of your data.
-
Download the package
When a new version is out, a dot on Settings shows it, and Settings → System has the download link. The app asks once a day, when an admin opens it; you can switch that off. Nothing is downloaded or installed on its own. You’ll also find the latest version on the Download page; all versions on GitHub are coming soon.
-
Let the app check it
As an admin, open Settings → System and choose “Select update package …”. The app checks every file against checksums. It rejects a package that is damaged, incomplete or older than your version.
Update packages aren’t signed: the check catches broken uploads, but it doesn’t prove who built a package. Only install packages you know the origin of, and hand out the admin role sparingly.
-
Install
“Install now” swaps the program files. The app is unavailable for a few seconds. The update doesn’t touch your notes, files or configuration.
-
Go back if needed
If something doesn’t work as expected, go to Settings → System and choose “Back to …” to restore the previous version. Notes and files stay as they are. Exactly one previous version is kept.
Backups
Back up, take along, move
A complete backup is one click away: Settings → Backup and import → “Everything as ZIP”. The archive is written as it downloads – even several gigabytes go through.
-
What’s in the backup
Notes, folders, labels, templates, versions, PDF annotations, recognised PDF text and all files. Not included: accounts and passwords. A backup isn’t encrypted, so keep it as safe as the server itself.
-
Automatic backups
As an admin, you have the whole instance stored daily or weekly as a ZIP on the server and choose how many backups to keep. So that a backup still helps if the server breaks, the app can send each new one to a WebDAV folder – on Nextcloud, a Storage Box or your NAS.
-
Import and move
As an admin, you import a backup under Settings → Backup and import. Your library is added to, not replaced: anything that already exists in a newer state stays unchanged.
That’s also how you move to a new server: download the backup, set up Snowfox Notes there, import the backup. Notes, folders, files, versions and annotations come along; accounts you create anew. Take
storage/app/instance-keywith you: sessions and stored secrets are encrypted with it. -
Export single notes
Save any note as Markdown or print it as a PDF. Several selected notes come as a ZIP of Markdown files. The other way round, drop Markdown and text files into the window – they become notes.
-
Take it to another app
Under Settings → Backup and import → “For other apps” you download everything you can see as a folder of Markdown files or as ENEX. The other way round, you bring in notes from Obsidian, Notion and Evernote there.
Troubleshooting
When something gets stuck
The most common stumbling blocks – and what you can do.
All I see is a blank page or “error 500”.
Usually the PHP version is too old. Open the check page: it shows you what’s missing. You switch the PHP version in your provider’s customer menu.
The app says a directory isn’t writable.
Set the permissions of storage/, bootstrap/cache/ and database/ to 775 – in most FTP programs under “file attributes”. Then reload the page.
My provider only allows small uploads.
No problem: Snowfox Notes transfers large files in 2 MB chunks. If the connection drops, it continues where it left off.
I can’t install updates from the settings.
Then PHP isn’t allowed to change the program folder, or the zip extension is missing. No obstacle: install the update via FTP (see “Updating via FTP” above).
Can I switch off the automatic redirect to HTTPS?
Yes, with the line NOTES_FORCE_HTTPS=false in the .env file. Without HTTPS, though, your password and notes travel through the network in plain text.
Someone forgot their password.
With a confirmed e-mail address, they reset it themselves on the sign-in page – that needs an SMTP account under Settings → Email. Otherwise an admin sets a new one under Settings → Members. If the only admin is locked out, only the command line on the server helps; the command is in the app’s manual.
Does Snowfox Notes run on nginx?
The package is prepared for Apache with .htaccess. There is no guide for nginx and other web servers yet.