Standard Notes is an open-source note taking application available on desktop and mobile platforms that offers end-to-end encrypted synchronization. In other words, all data are encrypted on device before they’re sent to the server to propagate to other devices. I think it’s one of the best open-source note taking products out there with a free plan, at the time of this writing.
That being said, their introductory free tier leaves a lot of be desired. It could work for users with basic note taking needs but if you want to organize your notes in nested folders, use multiple editors like Markdown and Rich text, switch between a variety of themes, or schedule regular backups, you have to go with a premium plan. At $12/month, or $5/month if billed yearly, their cheapest plan is definitely at the higher end of the spectrum, especially that the service isn’t complex enough to warrant the hefty subscription fee in my view. It should come at no surprise if a Standard Notes subscription is considered a quite hard expense to justify by regular users who don’t fiddle with notes on a daily basis, or heavily rely on note taking in a professional capacity.
Fortunately, the Standard Notes team is nice enough to open source all their stack for anyone to self-host for personal use. On top of the obvious benefit of enjoying all the premium features free of charge, self-hosting comes with the advantage of full data control. The official documentation around self-hosting published by the Standard Notes team is clear and straightforward. They put together a docker-compose file that defines the entire stack along with a convenient script to create configuration files, bring the stack up and down, view logs, and more.
Thanks to the power of containers, you can be up and running in a matter of minutes, unless you’re running an ARM chip like a Raspberry Pi. Sadly, Standard Notes don’t provide official Docker images for ARM processors. You can either pick one of the third-party images made available by random users, or build your own. I tend to go with the latter option because it grants more control over the software version packed in the image, and most importantly it obviates the inherent security risk that comes with running untrusted Docker images1. In the next section, we’ll go over the steps to build Docker images from source compatible with ARM processors, or any target architecture for that matter. If the official Docker images work on your processor architectures, feel free to jump straight to the “Premium extensions” section.
Building Docker images for ARM
First, we need to pull the code of the service we want to build a Docker image
for. Let’s go with the auth
service.
git clone https://github.com/standardnotes/auth
Then, from within the auth
folder, let’s switch to the latest tag, or any other
target version you want to use:
cd auth
git checkout 1.46.1
If you’re not sure what’s the latest tag, you can either check it directly on Github or list all available tags using:
git tag --list
If you’re building the image on the same machine that’s going to ultimately run the container, all you have to do is run a typical Docker build command like:
docker build -t arm-auth:1.46.1 .
However, if you’re building the image on a separate machine, perhaps
because your server doesn’t have enough resources to carry out the build
process, you can target a specific CPU architecture using buildx
. Here’s what
the command would look like:
docker buildx build --platform linux/arm/v6 -t arm-auth:1.46.1 . --load
Here, we’re targeting the version 6 of ARM and tagging the image with
arm-auth:1.46.1
. If you’re running a different version of ARM make sure to
update the --platform
flag accordingly.
As a side note, this will only work if linux/arm/v6
is loaded in the current
buildx
builder. To check the platforms supported by your buildx
builder,
run:
docker buildx ls
If your target platform is not currently loaded in buildx
, try running a
binfmt container like the following:
docker run --privileged --rm linuxkit/binfmt:a17941b47f5cb262638cfb49ffc59ac5ac2bf334
Now that the image is built, we need to move it to the server where it’s
supposed to run. To do so, we first need to save it in a tar
archive using the
following command:
docker save arm-auth:1.46.1 -o arm-auth.tar
Then, after transferring it to the server via rsync
, a USB key, or whatever
other means deemed most convenient, we should load it on the server using:
docker load -i arm-auth.tar
Now, if we list all Docker images using docker images
we should see our new
arm-auth
image. All that’s left to do is reference this image inside the
standalone docker-compose file provided by Standard Notes.
It goes without saying that all the steps we’ve gone through in this section would need to be repeated for each one of the official Standard Notes services, which currently are:
On top of their own services, Standard Notes use Redis for cache and MySQL for storage. The latter can be replaced with a MariaDB ARM image like linuxserver/mariadb while the former can be used as is; it already has a Docker image for ARM.
Premium extensions
Once your self-hosted Standard Notes instance is up, you can connect to it by pointing your Standard Notes client to your instance, under the “Advanced” section of the account creation or login view. You first need to create an account, which will be a “Basic” one by default, equivalent to the free tier. To be able to use premium themes and editors you need to upgrade your account with a couple of commands. Unfortunately, having a premium account in your self-hosted instance doesn’t automatically give you access to premium themes and editors. Standard Notes don’t give out their official premium extensions for free but you can load other community-built alternatives. Here are a couple of sources to get you started:
To load an extension, head over to your desktop client under Preferences > General > Advanced Settings. Then, enter the extension URL in the “Install Custom Extension” input field and hit “Install”.
Wrap up
Self-hosting Standard Notes is strikingly straightforward, barring few extra steps that require some Docker knowledge when working with an ARM chip. In this article, we’ve gone over everything needed to setup a Standard Notes server that’s not covered in the official documentation.
If you have any questions or face difficulties with the instructions laid out above, feel free to reach out on Mastodon.
The Docker image could fall out of date and lack crucial security patches; or, more unlikely although not totally impossible, contain malware. ↩︎