Safe-CMS - Censorship is a thing of the past


It looks great @AndyAlban and @Shane! This app is top notch.


Hi all,

I had a little bit of free time this morning, so I added arbitrary file uploads. :slight_smile:

Now, you can upload files of any type, size, etc, to any domain which you own, these files can then be used in your blog posts, templates, etc.

I’m very close to wrapping up this project now, l just decided to add this feature because it felt like something which was going to be really useful and it wasn’t a lot of effort, since I had already built to tooling for uploading to the network.


Good stuff. Can’t wait to try it!


Time to open up a Feature Request List for 1.1 of SAFE-CMS : ) Great work!


Hi all, the day is finally here. :slight_smile:

First of all, please be aware that this is a beta pre-release, things may be rough around the edges and there may be cross-platform issues, etc. The version 0.0.3 beta releases (for Windows and Linux) can be found here:

Linux has had a lot less testing than Windows, so please consider it less stable, but I’m free for the next 24 hours to make any hot-fix builds needed and I’ll push a 0.0.4 release for Linux users if there are any major breaking bugs.

Installation instructions can be found here on the Github page:, though they’re essentially “run the safe-cms executable after unzipping the directory”.

In addition, this also means that the code for the app is now open-source, so you can all have a good laugh at how bad it is. :wink: The code is released under an MIT license, so feel free to re-use any part of it.

A true 1.0.0 release should be within the coming 72 hours, including the MacOS build (and, if the electron-builder gods are friendly to us, NSIS installers for Windows and DMG installers for MacOS), but this beta release allows us to find anything weird, funky, nasty, etc.

On a personal note, I’m really nervous right now, there’s something oddly private about revealing a big chunk of code you’ve written from scratch to the world like this, but I’m also really excited - not only did I manage to build the thing I said I would, but it has more features than expected and it’s being delivered early.

If you’re specifically interested in the code I wrote (and much I borrowed from the safe-examples) to interface with the SAFE Network, that can be found here:

Long live the SAFE Network.


If you build something using the network, please post it here, I would really love to see what people make with the tool.

Edit 2

Updated release number to 0.0.3


Wohoo! Trying it now. Do you want any bugs found or commentary posted here or on Github?


Amazing, thanks a tonne!

To Github on the issues page if you already have an account: would be best, as I’ll only have to copy them over anyway. :slight_smile:

For those reading who don’t have a Github account, don’t worry - if you post it here, I’m more than happy to copy the issue over to Github for you.


I’ll be pushing a 0.0.3 release to fix a directory permissions issue on startup for Linux users - this will be available within the next 15 minutes.


The “Domains” don’t work.

Windows 10-64. I try both, peruse 0.4.1 and SafeBrowser 0.9.0. As a test I revoke the SafeCMS Permissions and run again but the same results.


Okay, would you be able to do me a favour please @digipl?

Right click within the app and select “Inspect Element”, then click on “Console” within the window which pops up.

Try to create a domain, and let me know what error appears. :slight_smile: Please send it to me directly as a message instead of posting it here, as it will likely contain some personal information about your machine’s directory structure, etc. Thanks!


This seems to be specific to users who have previously created domains with the project decorum wallet, I’m adding a workaround for this now for version 0.0.3, but this shouldn’t effect other users.


Good to know it just wasn’t a problem for me. Same issue using prebuilt binary and build from source via github. Also, when I run “npm package” I get an error. Latest Ubuntu ‘Artful’, linux x64, fresh SAFE account.


Version 0.0.3 is now available, I believe I have fixed both the directory permissions issue discovered by @JPL and the publicName decryption issue discovered by @digipl

On my local linux VM, I was encountering some issues where the Safe-CMS would refuse to render while the Safe Browser window was still open, I have no idea why I encountered this, as no one else seems to be, but it’s something I’m looking in to. If you don’t get a loading screen (but instead get a blank screen) it may be worth closing the Safe Browser after authenticating and approving the app (and report this back to me so I can look in to why) as it’s tricky to reproduce, and could simply be a memory issue, or similar.

@jlpell I’ve removed npm package from the package.json, this was legacy, I use npm dist-linux or npm dist-windows instead. :slight_smile:


I can confirm from a private conversation with @digipl and @JPL’s post here that the two issues encountered in 0.0.2 have been fixed by 0.0.3.


I am also getting this error on Fedora. Closing Peruse allows the app to render properly, as you say.


Yeah, I’m not exactly sure why that’s happening on Linux, it seems that the Electron window loadUrl function doesn’t actually return anything until the Safe Browser process is closed - but that makes no sense, since the Safe Browser call isn’t executed until after the page is loaded.

So essentially, the page doesn’t load, because something which happens after it has already loaded is stopping it from loading. :neutral_face:

I have a feeling it’s either an issue with threading, or it’s a function of Electron which considers the Safe-CMS a “hidden” window because the Safe Browser is loaded on top of it, so Electron is pausing the render thread. I’m sure it’ll be a one line configuration change, it’s just figuring out which flag I need to set.


OK, progress - I created a domain ‘hellooooo’ and added a service ‘world’ - all good. But when I tried to add a service to an existing domain ‘jpl7’ I got an error (tried other strings too, same result).


Okay, that’s good, could you give me some background information about JPL7? What tool was it created with (and version, if you know) does it already have any services, etc?


It was created using web-hosting-manager-v0.4.4-linux-x64 and it has no services


With @JPL’s help I’ve diagnosed this issue and create an issue on Github to track it: I probably won’t fix this tonight, but I’ll likely tackle it tomorrow in my live stream on Twitch.

In short: websites created with the web hosting manager are encrypted (private) by default, the blogs I create are unencrypted (public) by default, I need to detect the encryption state of any given domain and create files and services with that same value.


EDIT: I was being dumb here (moral: don’t drink, watch TV and look at code at the same time)… see my reply below.

I’m curious about this Shane, can you say a bit more. I’m wondering why WHM would create stuff that is published as private, or how it becomes public, as I’m doing similar stuff - storing LDP resources, and would like these to be accessible similar to a website, but over LDP (a REST API I’m providing in the client).

What exactly is created private by WHM and how can this be accessed by everyone?


EDIT: should have checked the issue before asking... so I see what is encrypted [here](, but I'm confused how if this is private the WHM created public websites - ideas? Back to watching Aliens! :alien: Update: looking at the code in the ad breaks... it is encrypting the key (public name) and value (services MD name) that it inserts into the public names container. This makes no sense to me. @bochaco can you clarify? If they are encrypted, how can a website be public? Seems odd to encrypt a *public* names entry ever?!


I’m still investigating this, but I will get back to you, it’s possible I’m totally wrong - unfortunately, the code has absolutely no documentation for what toEncrypt is for and why some keys are encrypted and others aren’t. I’ll post it in here once I discover why. :slight_smile: