A clean, Markdown-based publishing platform made for writers. Write together, and build a community.

Overview

 

WriteFreely


Latest release Build status Go Report Card

 

WriteFreely is a clean, minimalist publishing platform made for writers. Start a blog, share knowledge within your organization, or build a community around the shared act of writing.

Try the writing experience

Find an instance

Features

Made for writing

Built on a plain, auto-saving editor, WriteFreely gives you a distraction-free writing environment. Once published, your words are front and center, and easy to read.

A connected community

Start writing together, publicly or privately. Connect with other communities, whether running WriteFreely, Plume, or other ActivityPub-powered software. And bring members on board from your existing platforms, thanks to our OAuth 2.0 support.

Intuitive organization

Categorize articles with hashtags, and create static pages from normal posts by pinning them to your blog. Create draft posts and publish to multiple blogs from one account.

International

Blog elements are localized in 20+ languages, and WriteFreely includes first-class support for non-Latin and right-to-left (RTL) script languages.

Private by default

WriteFreely collects minimal data, and never publicizes more than a writer consents to. Writers can seamlessly create multiple blogs from a single account for different pen names or purposes without publicly revealing their association.

Write.as

The quickest way to deploy WriteFreely is with Write.as, a hosted service from the team behind WriteFreely. You'll get fully-managed installation, backup, upgrades, and maintenance — and directly fund our free software work ❤️

Learn more on Write.as.

Quick start

WriteFreely deploys as a static binary on any platform and architecture that Go supports. Just use our built-in SQLite support, or add a MySQL database, and you'll be up and running!

For common platforms, start with our pre-built binaries and head over to our installation guide to get started.

Packages

You can also find WriteFreely in these package repositories, thanks to our wonderful community!

Documentation

Read our full documentation on WriteFreely.org —️ and help us improve by contributing to the writefreely/documentation repo.

Development

Start hacking on WriteFreely with our developer setup guide. For Docker support, see our Docker guide.

Contributing

We gladly welcome contributions to WriteFreely, whether in the form of code, bug reports, feature requests, translations, or documentation improvements.

Before contributing anything, please read our Contributing Guide. It describes the correct channels for submitting contributions and any potential requirements.

License

Copyright © 2018-2021 A Bunch Tell LLC and contributing authors. Licensed under the AGPL.

Comments
  • Federation with Hubzilla

    Federation with Hubzilla

    Describe the bug

    New posts not shown in Hubzilla

    Steps to reproduce (if necessary)

    Steps to reproduce the behavior:

    1. In Hubzilla, add a new connection to a write.as account
    2. On the write.as account, add a new post
    3. Check that this new post is visible elsewhere (ex: from misskey), but not on Hubzilla

    Expected behavior

    I should see the new post in Hubzilla

    Application configuration

    Tested in qua.name instance Version or last commit: v0.9.1-49-g901bf14

    bug help wanted federation 
    opened by Eldarendil 30
  • AP actors have erroneous sharedInbox

    AP actors have erroneous sharedInbox

    In my actor, https://blog.dereferenced.org/api/collections/kaniini, I see:

    "endpoints":{"sharedInbox":""}
    

    This is obviously wrong ;)

    bug federation 
    opened by kaniini 23
  • support pubgate

    support pubgate

    this moves the unmarshaling of a remote actor out into a new helper which accounts for the possibility of a context being a list or a single entity. i.e. a string or an object.

    basics tests are provided for both situations

    also go fmt'd the file activitypub.go

    during the course of working on this I found a missing string format variable in exports.go, in fixing that I also go fmt'd the file.

    Fixes #100 This also fixes #116 by using the followers Inbox if SharedInbox is not set.

    • [x] I have signed the CLA
    opened by ghost 20
  • data: URIs are incorrectly stripped

    data: URIs are incorrectly stripped

    Describe the bug

    The markup

    ![Red dot](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==)
    

    Should show a red dot as an image.

    It doesn't. Inspecting the generated HTML from the Markdown shows that the generated img element has no src attribute.

    I think, but have not confirmed, that this is because https://github.com/writeas/writefreely/blob/32e99d00415c6e86a9536d9b824dcdf0b119270d/posts.go#L1368 does not include data: as a valid protocol.

    Expected behavior

    img element should be created with the correct src attribute.

    enhancement discussion 
    opened by nikclayton 17
  • Field 'description' doesn't have default value

    Field 'description' doesn't have default value

    ERROR: 2018/11/11 11:57:33 log.go:26: Rolling back collections INSERT: Error 1364: Field 'description' doesn't have a default value
    ERROR: 2018/11/11 11:57:33 log.go:26: Unable to create user: Error 1364: Field 'description' doesn't have a default value
    

    I had to manually change description varchar(160) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL to description varchar(160) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT ''

    however after that it shows the same problem with privacy field. Either something wrong with my mySQL or with your schema.sql. Server version: 5.7.18-0ubuntu0.16.10.1 (Ubuntu)

    bug 
    opened by MasterGroosha 17
  • db migrate error with utfmb4

    db migrate error with utfmb4

    I tried to upgrade to v0.12.0rc1

    "db migrate" gives the error ERROR: 2020/04/19 17:16:57 main.go:121: migrate: Error 1709: Index column size too large. The maximum column size is 767 bytes.

    I suspect this is due to my mysql being setup in utf8mb4.

    bug documentation 
    opened by vince2bir 16
  • Fix following from Mastodon with Authorized Fetch enabled

    Fix following from Mastodon with Authorized Fetch enabled

    This fixes federation with Mastodon instances that have Authorized Fetch turned on by signing the GET request to fetch the actor when a blog is first followed.

    Closes T820


    • ☑ I have signed the CLA
    opened by thebaer 15
  • Send out ActivityPub mentions (T627)

    Send out ActivityPub mentions (T627)

    This pull request adds code that scans the text of each post to be published for handles of the type @[email protected], uses webfinger to ask ActivityPub endpoints about them, gets their inbox and actor IRI's and adds mention tags to the post. Finally it adds the users to the CC list of the recipients of the activity.

    This works in pleroma but not in mastodon unless we set the object type to "Note" instead of "Article"

    T627

    opened by qwazix 15
  • Possible memory leak?

    Possible memory leak?

    Describe the bug

    I'm running WriteFreely v 0.9.1 on my Scaleway instance with 2GB of RAM. It's a single-user federated instance with SQLite as backend. I'm managing it via systemd with the following service description:

    [Unit]
    Description=Write Freely Instance
    After=syslog.target network.target
    
    [Service]
    Type=simple
    WorkingDirectory=/home/groosha/writefreely
    ExecStart=/home/groosha/writefreely/writefreely >> /var/log/writefreely.log
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    The only modification I made is replacing one of "letter-avatars" with a custom one to see a proper profile pic on Mastodon.

    Symptoms

    If I run WriteFreely for a long time (let's say, a month) without even touching it (no users, no new posts, nothing), it consumes almost all free RAM on server, causing other apps to have problems. For example, my Python scripts which are running as cron jobs and regular processes, raise some exceptions like RuntimeError: can't start new thread or vedis.cpython-35m-x86_64-linux-gnu.so: failed to map segment from shared object. Also running htop shows that writefreely process consumes ~60% of RAM: изображение (notice that I'm running only one process, but htop shows all threads)

    After I restart writefreely with systemctl restart writefreely everything gets back to normal: изображение (here I enabled "tree" view of processes, showing that I have only 1 process of writefreely and others are most likely threads)

    My bad I didn't write down Go internal stats from /admin page, I guess it would help a lot.

    Expected behavior

    RAM usage should depend on active users or API usage, not increase as the time goes by.

    Application configuration

    • Single mode or Multi-user mode? Single mode
    • Database? SQLite
    • Open registration? No
    • Federation enabled? Yes
    • Operating system? Ubuntu 16.10 (oops!)

    Version or last commit: 0.9.1

    help wanted performance 
    opened by MasterGroosha 15
  • check for lessc executable in any location

    check for lessc executable in any location

    previously the checks were explicit locations which does not work when using something like nvm to manage node packages and versions.

    this checks for the executable and sets the script variable LESSC to the full path of the one found. if none was found the make command will error.


    • [x] I have signed the CLA
    opened by ghost 14
  • Invalid JSON-LD syntax; @context must be an object.

    Invalid JSON-LD syntax; @context must be an object.

    When following my writefreely user [email protected] from friendica [email protected] I get the following error response upon writing new posts / updating posts in writefreely:

    2020/04/10 22:51:59 Response: JsonLdException: [jsonld.SyntaxError]: Invalid JSON-LD syntax; @context must be an object.

    From the json-ld spec it also seems that the context is supposed to be an object or a link to a jsonld file: https://www.w3.org/TR/2020/CR-json-ld11-20200316/#the-context

    bug federation 
    opened by wiwie 13
  • Browsing via a HashTag Link throws 404 error.

    Browsing via a HashTag Link throws 404 error.

    Describe the bug

    Clicking on a HashTag throws 404 error

    Steps to reproduce (if necessary)

    Steps to reproduce the behavior:

    1. Create a hashtag in a post, and publish post
    2. Click on hashtag

    Expected behavior

    The expected behaviour via the writer's guide is that the user should be taken to a special page that shows all posts with the same hashtag. The document is being called correctly e.g. https://blog.neurodiversity-in.au/stephen/tag:Fediverse

    Application configuration

    • Multiuser
    • mysql
    • Open registration - Yes
    • Federated - Yes

    Version or last commit: v0.13.2 (tar file)

    opened by sschwetz 0
  • Replace mattn/go-sqlite3 with modernc.org/sqlite

    Replace mattn/go-sqlite3 with modernc.org/sqlite

    This replaces the CGO wrapped C SQLite from github.com/mattn/go-sqlite3 with the pure Go implementation of SQLite from modernc.org/sqlite. This should remove the need for CGO to build WriteFreely. That is you can do:

    CGO_ENABLED=0 go build -v -tags='sqlite' ./cmd/writefreely/
    

    I've tested that I can initialize a new database, and also that I can load and serve the web UI from a database that was created with a build of WriteFreely using the CGO SQLite. Also, the tag pages work, which suggests that the add-in regexp command works. However, obviously this could all use some more extensive testing by people with significant SQLite databases.

    Motivation: With CGO SQLite removed, it should be possible to cross-compile WriteFreely without needing xgo or a C compiler setup. Not all OS and architecture combinations are supported by modernc.org/sqlite, but the list includes all the major ones. So this should make it easier to compile on a Mac and deploy on Linux, build binaries for all platforms using CI/CD, and so on.


    • [X] I have signed the CLA
    opened by lpar 0
  • Editor Screen Doesn't Support Bidirectional Texts

    Editor Screen Doesn't Support Bidirectional Texts

    Describe the bug

    When I'm writing in an RTL language at the editor screen, text direction is not set to RTL. But it has no problems with LTR languages. In other words, the user is expecting the text field to support bidirectional texts, but it doesn't.

    Steps to reproduce (if necessary)

    Steps to reproduce the behavior:

    1. Go to the editor screen
    2. Start typing in an RTL language (Persian, Arabic, etc.), followed by some LTR Paragraph.
    3. You'll see something like this, which is disturbing. image

    Expected behavior

    image Adding bidi support is very easy, I assume. I just attached dir="auto" to the textarea. (Maybe there are some other places you should use this attribute. I don't know.)

    Applications configuration

    • Multi-user Mode
    • Open Registration
    • Federation Enabled

    v0.13.1

    bug good first issue 
    opened by UsernamesAreFuckedUp 1
  • HTTP 200 returned when requesting text file that does not exist

    HTTP 200 returned when requesting text file that does not exist

    Describe the bug

    When you request a text file that does not exist, the HTML is not formatted and the server responds with 200 instead of the usual 404.

    image

    Steps to reproduce (if necessary)

    Steps to reproduce the behavior:

    1. Go to 'https://www.rant.li/(name).txt'

    Expected behavior

    WriteFreely should return a 404 and format the HTML.

    Application configuration

    • Single mode or Multi-user mode? Multi-user mode
    • Database? [mysql/sqlite] MySQL
    • Open registration? [yes/no] Yes
    • Federation enabled? [yes/no] Yes

    Version or last commit: v0.13.2

    bug 
    opened by zer-far 0
  • Make Writefreely translatable for any language

    Make Writefreely translatable for any language

    The intention of this Pull request is to make Writefreely interface translatable for any language easily. The only thing needed to do this is to add the language of the instance in the config.ini file, e.g. language = eu_ES and edit its corresponding PO file located in the locales directory. I'm not a GO developer and it might not be the best way to program it, but it works really well in a Docker container. I wish this could be a first step :)


    • [x] I have signed the CLA
    opened by aitzol76 0
  • Screen reader improvements for the editors

    Screen reader improvements for the editors

    Hello,

    Currently, the majority of the editor controls on the new post page do not work as expected when using a screen reader.

    The actual text areas work great, except for images in some cases (see below).

    For the pad editor:

    As far as I can tell there should be 2 dropdown menus (one for draft/public), and another one for selecting the font. A third one should be present if a user has multiple blogs.

    Here the edit field and the publish buttons are accessible.

    The above mentioned controls, however, appear as links, without any indication of what they belong to or whether they are selected. Adding ARIA menu and selected attributes should establish a logical order for a screen reader.

    Ideally, keyboard focus would be nice for complete accessibility, but just with some ARIA attributes these controls would be usable.

    For the classic editor:

    Some controls, such as the read more element appear as a clickable, these should have a button ARIA role.

    I do not see controls to select draft/public state for the new post here.

    Sometimes, the cursor gets stuck if an image is encountered, for example if one inserts a read more tag. I haven't tested the editor with inserted images, but it could potentially have the same happening.

    For the bare editor:

    This one does not seem to have controls, other than two links to the blogs and the posts of the current blog (I assume). In case the draft status can be selected, they are not visible to a screen reader here.

    The word count is readable in all 3 views.

    When editing an existing post, there is a new Edit metadata link, I'm not sure if this should appear for new posts as well. If so, it's not visible to a screen reader.

    I am using 29c898867ac23ea0df794ac481b1c8b8522d6c84 to test, currently under MacOS Safari via VoiceOver.

    I can test on more operating systems, if needed.

    Thank you very much in advance for any work to make these editors more usable. Please let me know if there's anything else I can do.

    accessibility 
    opened by Flameborn 0
Releases(v0.13.2)
  • v0.13.2(Nov 11, 2022)

    writefreely

    v0.13.2

    User-Facing Changes

    • Fix Gopher collections query (#501)
    • Fix date format in anonymous posts (#503)
    • Use relative URLs for static assets (#505)
    • Fix external user ID recording for Gitea OAuth (#514)
    • Fix blog monetization updates when using SQLite (#495)
    • Ensure link URLs and image alt text don't get included in the slug (T329, #520)
    • Improve keyboard navigation

    Admin-Facing Changes

    • Fix crash on empty post title

    Developer-Facing Changes

    • Upgrade bluemonday from 1.0.5 to 1.0.21
    • Upgrade ini pkg to v1.66.4
    • Ignore post created date when empty on publish

    Release updates

    NOTE: There is a blocking bug with our upstream tool, xgo, that helps us cross-compile WriteFreely: techknowlogick/xgo#155. Because of this, we'll only release linux-amd64 builds for the foreseeable future.

    Upgrading from v0.13.0

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    No additional steps are needed to upgrade from v0.13.0. Follow the instructions in each previous release if you're upgrading from an earlier version.

    Contributors

    Thanks to everyone who contributed bug reports, code, and code review to this release!

    @thebaer @StJudeWasHere @egon0 @gytisrepecka @lt3Dev @viasux @clausecker

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.13.2_linux_amd64.tar.gz(20.33 MB)
  • v0.13.1(Jun 30, 2021)

    User-Facing Changes

    • Fix title rendering as list item (#470)
    • Remove additional slash in /feed/ redirect
    • Don't include image alt text in post description metadata (#306)
    • Fix SQLite-backed instances locking up (#467)
    • Fix backslashes added to list items in Classic editor (#480)

    Admin-Facing Changes

    • Return error when generic OAuth provider doesn't return a user ID, and prompt admin to add map_user_id (#469)
    • Fix "Collection.hostName is empty!" log on Stats page (#468)

    Upgrading from v0.13.0

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    No additional steps are needed to upgrade from v0.13.0. Follow the instructions in each previous release if you're upgrading from an earlier version.

    Developers

    If you are running a custom build: we made changes to UI components that need to be compiled. Run this to compile everything:

    make ui
    

    Contributors

    Thanks to everyone who contributed bug reports, code, and code review to this release!

    @stayinside @bandicootdancing @PeterCxy @DaarkMoon @poVoq @Tealk @thebaer @mkyos

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.13.1_linux_amd64.tar.gz(21.81 MB)
    writefreely_0.13.1_linux_arm6.tar.gz(19.08 MB)
    writefreely_0.13.1_linux_arm64.tar.gz(20.69 MB)
    writefreely_0.13.1_linux_arm7.tar.gz(19.07 MB)
    writefreely_0.13.1_macos_amd64.tar.gz(14.57 MB)
    writefreely_0.13.1_windows_amd64.zip(21.36 MB)
  • v0.13.0(Jun 11, 2021)

    write freely

    v0.13

    Major Features

    Classic editor (T727)

    If plain text and Markdown aren't your thing, now you can get a more "classic" writing experience with the Classic editor! This features more of a What You See Is What You Get interface that doesn't require the learning curve of Markdown. However, behind the scenes, posts are still saved as Markdown, so you can always switch between the Classic and standard editor. Admins can enable this option by setting editor = classic in the [app] config section.

    Gopher Support (T559)

    Give your audience a old-school, lightweight way to read posts on your WriteFreely instance, via the Gopher protocol! Enable it with the new gopher_port config value in the [server] section. When it’s enabled, multi-user instances will show all Public blogs at gopher://[host]:[gopher_port]/.

    Gitea and Generic OAuth Provider Support (#293, #317, #405)

    We’ve added more ways for users to authenticate with your WriteFreely instance, via Gitea or any generic OAuth 2.0 provider! Our generic OAuth provider support in particular gives you the chance to use WriteFreely alongside a range of applications that hold your users, from Mastodon to Nextcloud to Keycloak.

    Web Monetization Support (T773)

    Writers can now accept micropayments for their work via the proposed Web Monetization standard, and even publish exclusive content behind a paywall. Admins can enable this by setting monetization = true in the [app] section of their config, or changing the setting in their admin panel. This is just the start as we look to give readers more ways to financially support writers — read more about this on the Write.as blog.

    ActivityPub Notes (#220)

    Now, WriteFreely is more friendly to microblogs! If a post doesn’t have a double-line-break in it, it’ll be sent to the fediverse as a Note, rather than an Article. If you’d prefer to always send Notes, admins can set notes_only = true in the [app] config section.

    Account deletion (T319)

    It’s now easy for users and admins to quickly delete account data from WriteFreely via the web! Admins can access this option from their Admin Dashboard, and users can access it from their Account Settings page, if admins have configured Open Account Deletions (via the Dashboard or config file: open_deletion = true under the [app] section).

    Post Signatures (T582)

    This enables users to add a signature to all blog posts, and update it from a single location (the blog's Customize page).

    User-Facing Changes / Fixes

    • Optimize Drafts retrieval (#295)
    • Support AP-style mentions of centralized social media accounts (#319)
    • Show warning in editor when local draft is out of date (#41)
    • Allow footer and header elements (#326)
    • Set pad light / dark theme based on system settings (#196)
    • Improved blog management navigation (#371)
    • Fix silenced user post visibility (#374)
    • Automatically resize CSS editor (T708)
    • Stop private and protected blogs from federating (#403)
    • Fix following from Mastodon with Authorized Fetch enabled (T820)
    • Fix language metadata gets reset to English after editing a post (#280)
    • Support logging out of password-protected blogs (T492)
    • Always show post actions on mobile devices (#309)
    • Include images as attachments in ActivityStreams data (#442)
    • Fix .md file import from Safari (#334)
    • Fix Custom CSS editor not working well on touchscreen devices (#452)
    • Support Drafts list paging (T401, T696)
    • Support title-only posts (#464)

    Minor Changes

    • Support number+letter hashtags
    • Use a bigger font size for h2 (#217)
    • Ignore "collation mix" errors in GetCollectionRedirect() (#318)
    • Make dropdown navigation menus more accessible (#355)
    • Fix removal of query parameters on youtube embed links (#328)
    • Truncate lede at question mark (#316)
    • Fix double HTML-encoded meta tags (#340)
    • Fix header spacing on pinned posts (#385)
    • Fix unable to edit posts titled "Tags" (#305)
    • Set SameSite=None on session cookie (#443)
    • Make language highlighting matching case-insensitive (#429)

    Admin-Facing Changes

    • Remove “No to!” log (#311)
    • Support encrypted database connections (#297)
    • Fix docker-compose (#407, #139, #323)
    • Fix Docker repository does not exist (#416)
    • Support user deletion from web interface (T319)
    • Support Unicode domain names (#457)

    Developer-Facing Changes

    • Add CORS header to public APIs (#327)
    • Support slug parameter when publishing a post (T811)
    • Return a url property on Publish a Post endpoint
    • Support setting description at user registration

    Performance / Backend

    • Move WriteFreely repo from writeas org to writefreely (#451)
    • Move MathJax library from submodule to single file (#176)
    • Improve static file serving with Cache-Control header (#322)
    • Use HTMLContent field in RSS feed (#418)
    • Remove writeas/nerds/store pkg dependency (#445)
    • Bump github.com/gorilla/feeds from 1.1.0 to 1.1.1
    • Bump github.com/hashicorp/go-multierror from 1.0.0 to 1.1.1
    • Bump github.com/microcosm-cc/bluemonday from 1.0.2 to 1.0.5
    • Bump github.com/stretchr/testify from 1.6.0 to 1.7.0
    • Bump gopkg.in/ini.v1 from 1.55.0 to 1.62.0
    • Bump github.com/guregu/null from v3.4 to v3.5
    • Bump github.com/go-sql-driver/mysql from 1.4.1 to 1.6.0
    • Bump github.com/writeas/import from 0.2.0 to 0.2.1
    • Bump github.com/mattn/go-sqlite3 from 1.10.0 to 1.14.6
    • Bump github.com/gorilla/schema from 1.0.2 to 1.2.0
    • Bump github.com/manifoldco/promptui from 0.3.2 to 0.8.0
    • Bump github.com/urfave/cli/v2 from 2.1.1 to 2.3.0
    • Bump github.com/fatih/color from 1.7.0 to 1.10.0

    Upgrading from v0.12.0

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    Now make sure your database is backed up, and update it with:

    writefreely db migrate
    

    Finally, generate a new encryption key needed for this release (you can ignore messages about removing existing keys):

    writefreely keys generate
    

    No additional steps are needed to upgrade from v0.12.0. Follow the instructions in each previous release if you're upgrading from an earlier version.

    Developers

    If you are running a custom build: we made changes to site styles and added a Javascript dependency that needs to be compiled (prose.js). Run this to compile everything:

    make ui
    

    Contributors

    Thanks to everyone who contributed to this release!

    Development

    @gytisrepecka @thebaer @RJ722 @ketudb @pascoual @Dar13 @shleeable @joicemjoseph @dariusk @Obayanju @qwazix @Antolius @colin-axner @conor-f @VV-EE @mostfunkyduck @Dak425 @cjeller1592 @x4e @robjloranger

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.13.0_linux_amd64.tar.gz(21.81 MB)
    writefreely_0.13.0_linux_arm6.tar.gz(19.08 MB)
    writefreely_0.13.0_linux_arm64.tar.gz(20.68 MB)
    writefreely_0.13.0_linux_arm7.tar.gz(19.06 MB)
    writefreely_0.13.0_macos_amd64.tar.gz(14.57 MB)
    writefreely_0.13.0_windows_amd64.zip(21.35 MB)
  • v0.13.0rc1(May 10, 2021)

    write freely

    v0.13 Release Candidate 1

    This is a WriteFreely v0.13.0 release candidate. It is intended to be stable, but may not be. Please open bug reports for any issues you find, and otherwise contact us via IRC (#writefreely on freenode) if you have any questions.

    Major Features

    Classic editor (T727)

    If plain text and Markdown aren't your thing, now you can get a more "classic" writing experience with the Classic editor! This features more of a What You See Is What You Get interface that doesn't require the learning curve of Markdown. However, behind the scenes, posts are still saved as Markdown, so you can always switch between the Classic and standard editor. Admins can enable this option by setting editor = classic in the [app] config section.

    Gopher Support (T559)

    Give your audience a old-school, lightweight way to read posts on your WriteFreely instance, via the Gopher protocol! Enable it with the new gopher_port config value in the [server] section. When it’s enabled, multi-user instances will show all Public blogs at gopher://[host]:[gopher_port]/.

    Gitea and Generic OAuth Provider Support (#293, #317, #405)

    We’ve added more ways for users to authenticate with your WriteFreely instance, via Gitea or any generic OAuth 2.0 provider! Our generic OAuth provider support in particular gives you the chance to use WriteFreely alongside a range of applications that hold your users, from Mastodon to Nextcloud to Keycloak.

    Web Monetization Support (T773)

    Writers can now accept micropayments for their work via the proposed Web Monetization standard. Admins can enable this by setting monetization = true in the [app] section of their config, or changing the setting in their admin panel. This is just the start as we look to give readers more ways to financially support writers — read more about this on the Write.as blog.

    ActivityPub Notes (#220)

    Now, WriteFreely is more friendly to microblogs! If a post doesn’t have a double-line-break in it, it’ll be sent to the fediverse as a Note, rather than an Article. If you’d prefer to always send Notes, admins can set notes_only = true in the [app] config section.

    Account deletion (T319)

    It’s now easy for users and admins to quickly delete account data from WriteFreely via the web! Admins can access this option from their Admin Dashboard, and users can access it from their Account Settings page, if admins have configured Open Account Deletions (via the Dashboard or config file: open_deletion = true under the [app] section).

    Post Signatures (T582)

    This enables users to add a signature to all blog posts, and update it from a single location (the blog's Customize page).

    User-Facing Changes / Fixes

    • Optimize Drafts retrieval (#295)
    • Support AP-style mentions of centralized social media accounts (#319)
    • Show warning in editor when local draft is out of date (#41)
    • Allow footer and header elements (#326)
    • Set pad light / dark theme based on system settings (#196)
    • Improved blog management navigation (#371)
    • Fix silenced user post visibility (#374)
    • Automatically resize CSS editor (T708)
    • Stop private and protected blogs from federating (#403)
    • Fix following from Mastodon with Authorized Fetch enabled (T820)
    • Fix language metadata gets reset to English after editing a post (#280)
    • Support logging out of password-protected blogs (T492)
    • Always show post actions on mobile devices (#309)
    • Include images as attachments in ActivityStreams data (#442)
    • Fix .md file import from Safari (#334)
    • Fix Custom CSS editor not working well on touchscreen devices (#452)
    • Support Drafts list paging (T401, T696)

    Minor Changes

    • Support number+letter hashtags
    • Use a bigger font size for h2 (#217)
    • Ignore "collation mix" errors in GetCollectionRedirect() (#318)
    • Make dropdown navigation menus more accessible (#355)
    • Fix removal of query parameters on youtube embed links (#328)
    • Truncate lede at question mark (#316)
    • Fix double HTML-encoded meta tags (#340)
    • Fix header spacing on pinned posts (#385)
    • Fix unable to edit posts titled "Tags" (#305)
    • Set SameSite=None on session cookie (#443)
    • Make language highlighting matching case-insensitive (#429)

    Admin-Facing Changes

    • Remove “No to!” log (#311)
    • Support encrypted database connections (#297)
    • Fix docker-compose (#407, #139, #323)
    • Fix Docker repository does not exist (#416)
    • Support user deletion from web interface (T319)
    • Support Unicode domain names (#457)

    Developer-Facing Changes

    • Add CORS header to public APIs (#327)
    • Support slug parameter when publishing a post (T811)

    Performance / Backend

    • Move WriteFreely repo from writeas org to writefreely (#451)
    • Move MathJax library from submodule to single file (#176)
    • Improve static file serving with Cache-Control header (#322)
    • Use HTMLContent field in RSS feed (#418)
    • Remove writeas/nerds/store pkg dependency (#445)
    • Bump github.com/gorilla/feeds from 1.1.0 to 1.1.1
    • Bump github.com/hashicorp/go-multierror from 1.0.0 to 1.1.1
    • Bump github.com/microcosm-cc/bluemonday from 1.0.2 to 1.0.5
    • Bump github.com/stretchr/testify from 1.6.0 to 1.7.0
    • Bump gopkg.in/ini.v1 from 1.55.0 to 1.62.0
    • Bump github.com/guregu/null from v3.4 to v3.5
    • Bump github.com/go-sql-driver/mysql from 1.4.1 to 1.6.0
    • Bump github.com/writeas/import from 0.2.0 to 0.2.1
    • Bump github.com/mattn/go-sqlite3 from 1.10.0 to 1.14.6
    • Bump github.com/gorilla/schema from 1.0.2 to 1.2.0
    • Bump github.com/manifoldco/promptui from 0.3.2 to 0.8.0
    • Bump github.com/urfave/cli/v2 from 2.1.1 to 2.3.0
    • Bump github.com/fatih/color from 1.7.0 to 1.10.0

    Upgrading from v0.12.0

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    Now make sure your database is backed up, and update it with:

    writefreely db migrate
    

    Finally, generate a new encryption key needed for this release (you can ignore messages about removing existing keys):

    writefreely keys generate
    

    No additional steps are needed to upgrade from v0.12.0. Follow the instructions in each previous release if you're upgrading from an earlier version.

    Developers

    If you are running a custom build: we made changes to site styles and added a Javascript dependency that needs to be compiled (prose.js). Run this to compile everything:

    make ui
    

    Contributors

    Thanks to everyone who contributed to this release!

    Development

    @gytisrepecka @thebaer @RJ722 @ketudb @pascoual @Dar13 @shleeable @joicemjoseph @dariusk @Obayanju @qwazix @Antolius @colin-axner @conor-f @VV-EE @mostfunkyduck @Dak425 @cjeller1592 @x4e @robjloranger

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.13.0rc1_linux_amd64.tar.gz(21.79 MB)
    writefreely_0.13.0rc1_linux_arm6.tar.gz(19.06 MB)
    writefreely_0.13.0rc1_linux_arm64.tar.gz(20.67 MB)
    writefreely_0.13.0rc1_linux_arm7.tar.gz(19.05 MB)
    writefreely_0.13.0rc1_macos_amd64.tar.gz(14.56 MB)
    writefreely_0.13.0rc1_windows_amd64.zip(21.34 MB)
  • v0.12.0(Apr 22, 2020)

    write freely

    v0.12

    Major Features

    ActivityPub Mentions (T627)

    Enable more interaction with your posts by mentioning users on Mastodon, Pleroma, and other ActivityPub platforms! Users on instances with federation enabled can now insert @[email protected] to mention someone. You might use this to write a long response to someone in the fediverse, or even mention your own microblogging account, so that replies to your blog post also notify you there, where you can continue the conversation.

    New Admin Dashboard (T694)

    We've redesigned the admin dashboard to be a little easier to navigate, and generally more user friendly. It now includes an overview of stats for your instance, dedicated pages for app settings and monitoring, and more details on what each configuration option does. We've also made it easier for admins to get to the "Invite people" page.

    OAuth 2.0 Support (#225)

    Now you can authenticate with your WriteFreely instance via OAuth! This is perfect for WriteFreely communities that are set up to accompany other platforms. We support three providers so far: GitLab, Slack, and Write.as.

    Reader Filter Updates (#269)

    Now the Reader will show the most recent 250 public posts, instead of only the last three months of public posts. This should be much more fitting for most WriteFreely instances.

    Plain Text Import

    Now you can import plain text files to publish them as posts on WriteFreely.

    User-Facing Changes / Fixes

    • Show dates on blog posts (T669, #276)
    • Show post publish dates in local time (T670)
    • Fix HTML entities in Draft descriptions (#248)
    • Add Drafts explanation (#248)
    • Fix post deletion on Pleroma (#233)
    • Make user management + Reader pages consistent in their design (#262)
    • Fix image metadata extraction (#266)
    • Add syntax highlighting aliases: js, jsx, html (#270)
    • Lightly style tables in posts (#194)
    • Send users to Login page by default on private instances (#274)
    • Fix pagination on last page of blogs using "Novel" display format (#272)
    • Show 503 Service Unavailable page when server under high load (#284)
    • Remove extraneous @context fields to fix Friendica federation (#299)

    Minor Changes

    • Require authentication for accessing editor (#245, #255)
    • Fix 500 on invite links with invalid characters (#250)
    • Tell search engines not to index invite URLs (#268)
    • Hide Reader footer link when unauthenticated on private instances (#274)

    Admin-Facing Changes

    • Support Varnish use on ActivityPub endpoints (#180)
    • Fix automatic certificates (#228)
    • Automatically check for WriteFreely updates (T572) -- enable with update_checks = true in config
    • Support account deletion via command-line for non-federated instances (T319 / #202)
    • Support sign in via Write.as
    • Support sign in via Slack (T710)
    • Support sign in via GitLab (#277)
    • Refactor command-line commands (#261)

    Developer-Facing Changes

    • Add /api/markdown endpoint for generating HTML from Markdown
    • Add ARM64 build (#213)
    • Support OAuth 2.0 as client application (#225)
    • Add stylesheet cache busting script and use it on official WF release (#288)

    Performance / Backend

    • Improve resource use for federation (#249)
    • Fix memory leak from gorilla/session library (#133)

    Upgrading from v0.3.0 or later

    Download the latest release for your operating system, from the files below. Then follow these steps:

    1. Stop running your writefreely service
    2. Replace all files in your installation except the keys directory with the files from the archive
    3. Start your writefreely service again.

    Now make sure your database is backed up, and migrate it with the steps below.

    1. If you're running MariaDB, run this query on your WriteFreely database (fixes #302):
    ALTER DATABASE writefreely CHARACTER SET latin1 COLLATE latin1_swedish_ci;
    
    1. Finally, run this command to update your database schema:
    writefreely db migrate
    

    No additional steps are needed to upgrade from v0.3.0 or later. Follow the instructions in each previous release if you're upgrading from an earlier version.

    Developers

    If you are running a custom build, note that there were style changes in this release. Run the following command to generate the latest stylesheets:

    make ui
    

    Contributors

    Thanks to everyone who contributed to this release!

    Development

    @thebaer @robjloranger @qwazix @yalh76 @ngerakines @techknowlogick @shleeable @nkoehring @paddatrapper @cjeller1592

    Documentation

    @cjeller1592

    Bug reports

    @barbrastreisand @wakest @judges119 @laBecasse @misaka00251 @OliverViking @mrvdb @darddan @wiwie @annando

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.12.0_linux_amd64.tar.gz(45.17 MB)
    writefreely_0.12.0_linux_arm6.tar.gz(42.52 MB)
    writefreely_0.12.0_linux_arm64.tar.gz(44.02 MB)
    writefreely_0.12.0_linux_arm7.tar.gz(42.51 MB)
    writefreely_0.12.0_macos_amd64.tar.gz(38.47 MB)
    writefreely_0.12.0_windows_amd64.zip(57.24 MB)
  • v0.12.0rc1(Mar 27, 2020)

    write freely

    v0.12 Release Candidate 1

    This is a WriteFreely v0.12.0 release candidate. It is intended to be stable, but may not be. Please open bug reports for any issues you find, and otherwise contact us via IRC (#writefreely on freenode) if you have any questions.

    Major Features

    ActivityPub Mentions (T627)

    Enable more interaction with your posts by mentioning users on Mastodon, Pleroma, and other ActivityPub platforms! Users on instances with federation enabled can now insert @[email protected] to mention someone. You might use this to write a long response to someone in the fediverse, or even mention your own microblogging account, so that replies to your blog post also notify you there, where you can continue the conversation.

    New Admin Dashboard (T694)

    We've redesigned the admin dashboard to be a little easier to navigate, and generally more user friendly. It now includes an overview of stats for your instance, dedicated pages for app settings and monitoring, and more details on what each configuration option does. We've also made it easier for admins to get to the "Invite people" page.

    OAuth 2.0 Support (#225)

    Now you can authenticate with your WriteFreely instance via OAuth! This is perfect for WriteFreely communities that are set up to accompany other platforms. We support three providers so far: GitLab, Slack, and Write.as.

    Reader Filter Updates (#269)

    Now the Reader will show the most recent 250 public posts, instead of only the last three months of public posts. This should be much more fitting for most WriteFreely instances.

    Plain Text Import

    Now you can import plain text files to publish them as posts on WriteFreely.

    User-Facing Changes / Fixes

    • Show dates on blog posts (T669, #276)
    • Show post publish dates in local time (T670)
    • Fix HTML entities in Draft descriptions (#248)
    • Add Drafts explanation (#248)
    • Fix post deletion on Pleroma (#233)
    • Make user management + Reader pages consistent in their design (#262)
    • Fix image metadata extraction (#266)
    • Add syntax highlighting aliases: js, jsx, html (#270)
    • Lightly style tables in posts (#194)
    • Send users to Login page by default on private instances (#274)
    • Fix pagination on last page of blogs using "Novel" display format (#272)
    • Show 503 Service Unavailable page when server under high load (#284)

    Minor Changes

    • Require authentication for accessing editor (#245, #255)
    • Fix 500 on invite links with invalid characters (#250)
    • Tell search engines not to index invite URLs (#268)
    • Hide Reader footer link when unauthenticated on private instances (#274)

    Admin-Facing Changes

    • Support Varnish use on ActivityPub endpoints (#180)
    • Fix automatic certificates (#228)
    • Automatically check for WriteFreely updates (T572) -- enable with update_checks = true in config
    • Support account deletion via command-line for non-federated instances (T319 / #202)
    • Support sign in via Write.as
    • Support sign in via Slack (T710)
    • Support sign in via GitLab (#277)
    • Refactor command-line commands (#261)

    Developer-Facing Changes

    • Add /api/markdown endpoint for generating HTML from Markdown
    • Add ARM64 build (#213)
    • Support OAuth 2.0 as client application (#225)
    • Add stylesheet cache busting script and use it on official WF release (#288)

    Performance / Backend

    • Improve resource use for federation (#249)
    • Fix memory leak from gorilla/session library (#133)

    Upgrading from v0.11.x

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    Now make sure your database is backed up, and update it with:

    writefreely db migrate
    

    No additional steps are needed to upgrade from v0.11.x. Follow the instructions in each previous release if you're upgrading from an earlier version.

    Developers

    If you are running a custom build, note that there were style changes in this release. Run make ui to generate the latest stylesheets.

    Contributors

    Thanks to everyone who contributed to this release!

    Development

    @thebaer @robjloranger @qwazix @yalh76 @ngerakines @techknowlogick @shleeable @nkoehring @paddatrapper @cjeller1592

    Documentation

    @cjeller1592

    Bug reports

    @barbrastreisand @wakest @judges119 @laBecasse @misaka00251 @OliverViking @mrvdb @darddan

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.12.0rc1_linux_amd64.tar.gz(45.14 MB)
    writefreely_0.12.0rc1_linux_arm6.tar.gz(42.51 MB)
    writefreely_0.12.0rc1_linux_arm64.tar.gz(44.00 MB)
    writefreely_0.12.0rc1_linux_arm7.tar.gz(42.49 MB)
    writefreely_0.12.0rc1_macos_amd64.tar.gz(38.46 MB)
    writefreely_0.12.0rc1_windows_amd64.zip(57.21 MB)
  • v0.11.2(Dec 18, 2019)

    write freely

    User-Facing Changes / Fixes

    • Fix Announceing posts via ActivityPub (#212)
    • Fix id property in collection posts ActivityStreams data (#214)
    • Remove false "programmer error" log (#216)
    • Fix password-protected blog rendering (#221)
    • Fix silenced password-protected blog quirks
    • Fix wrong errors returned when looking up non-existent paths (#215)

    Upgrading from v0.11.x

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    No additional steps are needed to upgrade from v0.11.x. Follow the instructions in each previous release if you're upgrading from v0.10.0 or earlier.

    Contributors

    Thanks for contributing to this release!

    @robjloranger @cjeller1592

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.11.2_linux_amd64.tar.gz(44.02 MB)
    writefreely_0.11.2_linux_arm64.tar.gz(42.95 MB)
    writefreely_0.11.2_linux_arm7.tar.gz(41.62 MB)
    writefreely_0.11.2_macos_amd64.tar.gz(38.65 MB)
    writefreely_0.11.2_windows_amd64.zip(56.03 MB)
  • v0.11.1(Nov 12, 2019)

    write freely

    Major Features

    Automatic SSL certificates from Let's Encrypt (T542)

    It's now even easier to start up a WriteFreely instance with free, automatic certificates from Let's Encrypt. With the application facing the public internet (i.e. not behind a reverse proxy), you can set a few configuration values to have WriteFreely generate the certificate for you.

    For new instances, choose Production, standalone > Secure (port 443), auto certificate during the interactive setup process.

    For existing instances, set autocert = true and tls_cert_path = certs (see config documentation for more information).

    WriteFreely Command-Line Interface

    We've released our first official WriteFreely client along with this version: wf-cli! This is a simple command-line-based tool for publishing to one or many WriteFreely instances. It's perfect for tech-savvy users who don't want to leave their terminal window or anyone looking to build WriteFreely publishing into their desktop writing workflow -- and it's available for Windows, Mac, and Linux.

    User-Facing Changes / Fixes

    • Prevent transliterated slugs from exceeding character limit (#137)
    • Don't consider posts unpublished when they have a title (#138)
    • Blog 404 pages are now styled like the rest of the blog (T493)
    • Fix missing hostname when publishing via API and support WriteFreely CLI (#144)
    • Fix various minor issues with single-user instances (#145)
    • Support <audio> HTML element (#147)
    • Fix future pinned posts showing in navigation (#158)
    • Fix false logged-in state on failed login
    • Fix title attribute getting stripped on <abbr> elements (#184)
    • Add helpful instructions on invite links when logged in (T690)
    • Publish to user's blog by default, instead of Drafts (T697)
    • Fix blog URLs in CSV export (#205)
    • Include Reader link in site-wide navigation while logged in
    • Make header navigation on user and non-authenticated pages consistent

    Minor Changes

    • Fix go-sitemap-generator overriding GOMAXPROCs (#86)
    • Log server software and version on startup (#168)
    • Fix crash on some duplicate ActivityPub follows (#159)

    Admin-Facing Changes

    • Support setting a default visibility for all blogs (T675, #148)
    • Support toning down WriteFreely promotion (T676, #149)
    • Support using an alternative editor template (T677)
    • Support customizing Reader page (T684)
    • Support resetting user password from web-based UI (T695)
    • Fix tar bomb on install (#160)

    Developer-Facing Changes

    • Add make build-arm7
    • Remove dependency on github.com/gogs/gogs/pkg/tool (#182)
    • API endpoints will now honor Accept: application/json headers (not only Content-Type) (#178)

    Experimental / In-Progress Work

    User Silencing (T661)

    Now instance admins can silence problematic users to make their writing inaccessible to the world and prevent further publishing. This strikes a balance between preventing further abuse and making reversible moderation decisions, as users will still be able to log in to their account and access their data.

    This is still experimental, as it needs more extensive testing. Please report any bugs you find and give us any feedback you have on this feature!

    Reader-centric instances (T681, #157)

    As part of our new Write.as for Teams service, we're experimenting with an alternative configuration for admins that want their site to be more focused on the collective work of its writers, rather than on individuals. It's meant for businesses, organizations, and institutions that want to create more of a shared blog than provide individual blog hosting. It sets the Reader view as the home page, uses blog templates with global navigation, and has hashtags search across all public blogs.

    This functionality is not at all finalized, and subject to change drastically without notice. We don't recommend enabling this in your configuration unless you're merely curious or want to provide feedback (which we highly encourage!).

    Upgrading from v0.10.0

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    Now make sure your database is backed up, and update it with writefreely --migrate.

    No additional steps are needed to upgrade from v0.10.0. Follow the instructions in each previous #release if you're upgrading from an earlier version.

    Developers

    If you are running a custom build, note that there were style changes in this release. Run make ui to generate the latest stylesheets.

    About v0.11.0...

    Our v0.11.0 release featured a new regression that broke single-user instances, and taught us about the value release candidates -- something we'll start doing, going forward. There's no extra work needed to upgrade from v0.11.0 if you've already upgraded from v0.10 -- only your enduring support as we learn how to build good software goodly.

    Contributors

    Thanks for contributing to this release!

    @robjloranger @OddBloke

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.11.1_linux_amd64.tar.gz(44.02 MB)
    writefreely_0.11.1_linux_arm7.tar.gz(41.62 MB)
    writefreely_0.11.1_macos_amd64.tar.gz(38.65 MB)
    writefreely_0.11.1_windows_amd64.zip(56.03 MB)
  • v0.11.0(Nov 11, 2019)

    write freely

    Major Features

    Automatic SSL certificates from Let's Encrypt (T542)

    It's now even easier to start up a WriteFreely instance with free, automatic certificates from Let's Encrypt. With the application facing the public internet (i.e. not behind a reverse proxy), you can set a few configuration values to have WriteFreely generate the certificate for you.

    For new instances, choose Production, standalone > Secure (port 443), auto certificate during the interactive setup process.

    For existing instances, set autocert = true and tls_cert_path = certs (see config documentation for more information).

    WriteFreely Command-Line Interface

    We've released our first official WriteFreely client along with this version: wf-cli! This is a simple command-line-based tool for publishing to one or many WriteFreely instances. It's perfect for tech-savvy users who don't want to leave their terminal window or anyone looking to build WriteFreely publishing into their desktop writing workflow -- and it's available for Windows, Mac, and Linux.

    User-Facing Changes / Fixes

    • Prevent transliterated slugs from exceeding character limit (#137)
    • Don't consider posts unpublished when they have a title (#138)
    • Blog 404 pages are now styled like the rest of the blog (T493)
    • Fix missing hostname when publishing via API and support WriteFreely CLI (#144)
    • Fix various minor issues with single-user instances (#145)
    • Support <audio> HTML element (#147)
    • Fix future pinned posts showing in navigation (#158)
    • Fix false logged-in state on failed login
    • Fix title attribute getting stripped on <abbr> elements (#184)
    • Add helpful instructions on invite links when logged in (T690)
    • Publish to user's blog by default, instead of Drafts (T697)
    • Fix blog URLs in CSV export (#205)

    Minor Changes

    • Fix go-sitemap-generator overriding GOMAXPROCs (#86)
    • Log server software and version on startup (#168)
    • Fix crash on some duplicate ActivityPub follows (#159)

    Admin-Facing Changes

    • Support setting a default visibility for all blogs (T675, #148)
    • Support toning down WriteFreely promotion (T676, #149)
    • Support using an alternative editor template (T677)
    • Support customizing Reader page (T684)
    • Support resetting user password from web-based UI (T695)
    • Fix tar bomb on install (#160)

    Developer-Facing Changes

    • Add make build-arm7
    • Remove dependency on github.com/gogs/gogs/pkg/tool (#182)
    • API endpoints will now honor Accept: application/json headers (not only Content-Type) (#178)

    Experimental / In-Progress Work

    User Silencing (T661)

    Now instance admins can silence problematic users to make their writing inaccessible to the world and prevent further publishing. This strikes a balance between preventing further abuse and making reversible moderation decisions, as users will still be able to log in to their account and access their data.

    This is still experimental, as it needs more extensive testing. Please report any bugs you find and give us any feedback you have on this feature!

    Reader-centric instances (T681, #157)

    As part of our new Write.as for Teams service, we're experimenting with an alternative configuration for admins that want their site to be more focused on the collective work of its writers, rather than on individuals. It's meant for businesses, organizations, and institutions that want to create more of a shared blog than provide individual blog hosting. It sets the Reader view as the home page, uses blog templates with global navigation, and has hashtags search across all public blogs.

    This functionality is not at all finalized, and subject to change drastically without notice. We don't recommend enabling this in your configuration unless you're merely curious or want to provide feedback (which we highly encourage!).

    Upgrading from v0.10.0

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    Now make sure your database is backed up, and update it with writefreely --migrate.

    No additional steps are needed to upgrade from v0.10.0. Follow the instructions in each previous #release if you're upgrading from an earlier version.

    Developers

    If you are running a custom build, note that there were style changes in this release. Run make ui to generate the latest stylesheets.

    Contributors

    Thanks for contributing to this release!

    @robjloranger @OddBloke

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.11.0_linux_amd64.tar.gz(44.03 MB)
    writefreely_0.11.0_linux_arm7.tar.gz(41.61 MB)
    writefreely_0.11.0_macos_amd64.tar.gz(38.65 MB)
    writefreely_0.11.0_windows_amd64.zip(56.04 MB)
  • v0.10.0(Jul 2, 2019)

    write freely

    Major Features

    Fully Private Instances (T576)

    Communities looking for more privacy can now start up WriteFreely instances meant only for internal use. Just enable the private config value to make all blogs and content accessible only to authenticated users in your instance.

    NOTE: this is a breaking change! This changes behavior for existing instances with the private config value already set to true. If you have it set, you should verify that the new behavior is what you want.

    Landing Page Customization (T565, T574)

    Now admins have two new ways to customize their multi-user instance:

    Editing your landing page. Now you can change the content of your landing page from the Admin dashboard, including the banner text to the left of the signup form and the optional text below.

    Changing the landing URL. For anyone who doesn't want to use their normal landing page -- such as with closed or invite-only instances -- this lets you set the URL that unauthenticated users go to when they first come to your site. For example, you might send them to your About page (/about) or your public Reader (/read).

    User-Facing Changes / Fixes

    • Add Lithuanian translation (writeas/web-core#3)
    • Fix changing RTL setting back to LTR from web UI (#103, #110)
    • Fix federation with pubgate (#100, #111, #116)
    • Include pinned posts in JSON export (#112)
    • Include post title in exported txt files (#114)
    • Fix same-size 1st- and 2nd-level headings on blog index (#82)
    • Fix post deletion logic needed for WriteFreely CLI (#117)
    • Fix C syntax highlighting (#124)
    • Fix default background-color not set (#132)
    • Fix inconsistent naming / icons on post metadata page

    Admin-Facing Changes

    • Landing URL is now editable (T574)
    • The private config option now makes an instance readable only by registered, authenticated users (T576)
    • New upgrade script
    • The --config command now automatically initializes the database, removing the need for --init-db during setup
    • Specify which part of the app configuration you want to edit with the new --sections flag, e.g. writefreely --config --section="app db server"
    • Landing page is now customizable (T565)

    Developer-Facing Changes

    • Fix lessc installation on macOS and CentOS (#97, #99)
    • MathJax library is now a git submodule instead of directly included
    • The writefreely.Serve() func has been split out into multiple functions
    • Flag handling has moved out of the writefreely pkg to cmd/writefreely/main.go

    Upgrading from v0.9.x

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    No additional steps are needed to upgrade from v0.9.x. Follow the instructions in each previous #release if you're upgrading from an earlier version.

    Developers

    If you are running a custom build, note that there were style changes in this release. Run make ui to generate the latest stylesheets.

    Contributors

    Thanks to everyone who contributed to this release!

    @dariusk @gytisrepecka @robjloranger @joyeusenoelle @sandrockcstm @qwazix @mrvdb

    #WriteFreely

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.10.0_linux_amd64.tar.gz(47.91 MB)
    writefreely_0.10.0_linux_arm7.tar.gz(45.50 MB)
    writefreely_0.10.0_macos_amd64.tar.gz(42.43 MB)
    writefreely_0.10.0_windows_amd64.zip(56.37 MB)
  • v0.9.1(Apr 20, 2019)

    write freely

    This isn't a required upgrade; it's only needed to fix new installations.

    Admin-Facing Changes

    • Fix V2 migrations not run on a new instance (#92)
    • Fix Docker build with Go Modules enabled (#95)

    Upgrading from v0.9.0

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    No additional steps are needed to upgrade from v0.9.0. Follow the instructions in each previous #release if you're upgrading from an earlier version.

    Contributors

    Thanks for contributing to this release!

    @kaiyou

    #WriteFreely

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.9.1_linux_amd64.tar.gz(26.93 MB)
    writefreely_0.9.1_macos_amd64.tar.gz(21.46 MB)
    writefreely_0.9.1_windows_amd64.zip(27.29 MB)
  • v0.9.0(Apr 13, 2019)

    write freely

    User-Facing Changes / Fixes

    • Fix hash symbols (#) wrongly recognized as hashtags inside code blocks (#6)
    • Hashtags without spaces between them are now properly parsed
    • Fix IsValidUsername check when PagesParentDir isn't current dir
    • Fix code blocks not highlighting when an invalid language is given (#81)
    • Strip HTML from meta descriptions (#83)
    • Add missing Apple touch icons (#77, #78)
    • Fix future-dated posts being immediately federated when moving from Draft to blog (#76)
    • Fix draft post metadata (#91)
    • Fix excessive space between paragraphs inside blockquotes

    Minor Changes

    • Navigating to a non-existent invite ID now shows "Page not found" instead of "Server error"
    • On Export page: "zip" option now shows "txt" instead
    • Remove unused references to files.writeas.org resources

    Admin-Facing Changes

    • Improve admin navigation
    • Move "About" and "Privacy" page editing off the dashboard to a new dedicated section
    • Add the ability to change "About" and "Privacy" page titles
    • Add Admin Dashboard link in backend navigation

    Upgrading from v0.8.x

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    Now make sure your database is backed up, and update it with writefreely --migrate.

    No additional steps are needed to upgrade from v0.8.x. Follow the instructions in each previous #release if you're upgrading from an earlier version.

    Developers

    If you are running a custom build, note that there were style changes in this release. Run make ui to generate the latest stylesheets.

    Contributors

    Thanks for contributing to this release!

    @mrvdb

    #WriteFreely

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.9.0_linux_amd64.tar.gz(26.93 MB)
    writefreely_0.9.0_macos_amd64.tar.gz(21.45 MB)
    writefreely_0.9.0_windows_amd64.zip(27.30 MB)
  • v0.8.1(Feb 1, 2019)

    write freely

    User-facing Fixes

    • Fix same-page anchor links (#43, #42, #33)

    Install Fixes

    • Admin account isn't created correctly with --config (#71)
    • Use correct go get command in documentation

    Admin-Facing Changes

    • Fix --create-user usage error message

    Trivial Changes

    • Fix Write.as link in README

    Upgrading from v0.8.0

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    No additional steps are needed to upgrade from v0.8.0. Follow the instructions in each previous #release if you're upgrading from an earlier version.

    Contributors

    Thanks for contributing to this release!

    @mrvdb @SamWhited

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.8.1_linux_amd64.tar.gz(26.89 MB)
    writefreely_0.8.1_macos_amd64.tar.gz(21.43 MB)
    writefreely_0.8.1_windows_amd64.zip(27.25 MB)
  • v0.8.0(Jan 24, 2019)

    write freely

    Features

    User Invites (T556)

    Now it's even easier to run a private / invite-only community, with user invites. Admins have a new user_invites setting that can enable invite link generation for all users, admins only, or no users at all (the default). If enabled, users can create invite links to let others sign up for your WriteFreely instance, even if public registration is closed. Invite links can each be set to expire, or optionally have a maximum number of uses.

    User-Facing Changes / Fixes

    • Fix spacing in sublists (#27)
    • Optimize web font loading (#65)

    Admin-Facing Changes

    • Fixed Docker build (#57)
    • Support automated database migration with writefreely --migrate (T509)
    • Support configuring resource directories (T560 / #63)

    Upgrading from v0.7.x

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    Now make sure your database is backed up, and update it with writefreely --migrate.

    No additional steps are needed to upgrade from v0.7.x. Follow the instructions in each previous #release if you're upgrading from an earlier version.

    Developers

    If you are running a custom build, note that there were style changes in this release. Run make ui to generate the latest stylesheets.

    Contributors

    Thanks to everyone who contributed to this release!

    @kaiyou @nkoehring

    #WriteFreely

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.8.0_linux_amd64.tar.gz(26.89 MB)
    writefreely_0.8.0_macos_amd64.tar.gz(21.42 MB)
    writefreely_0.8.0_windows_amd64.zip(27.25 MB)
  • v0.7.1(Jan 13, 2019)

    write freely

    Fixes

    • Fix blog customize page not rendering on Windows (#61)
    • Initialize database during config step for single-user instance (#59)

    Upgrading from v0.7.0

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    No additional steps are needed to upgrade from v0.7.0. Follow the instructions in each previous #release if you're upgrading from an earlier version.

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.7.1_linux_amd64.tar.gz(26.87 MB)
    writefreely_0.7.1_macos_amd64.tar.gz(21.40 MB)
    writefreely_0.7.1_windows_amd64.zip(27.22 MB)
  • v0.7.0(Jan 8, 2019)

    write freely

    Features

    User Management

    • Admin user creation. Admins can now create a normal user from the command-line with: writefreely --create-user username:password
    • Users List (T553). Get an overview of all the users in your community with the new user list for admins. This is the foundation for future moderation features.

    Changes

    • Use an en dash in the title of posts that are written in German, instead of em dash (#1)
    • Now you can build writefreely without SQLite support. To include support, compile with the sqlite build tag (this is the default with all make commands)
    • Blog names starting with a number now have an ActivityPub avatar

    Fixes

    • Prevent creating users with invalid usernames via command-line (#49)
    • Fix metadata update for draft posts on single-user instances (#50)
    • Fix "Database user or password not set." error when starting SQLite-backed instances (#54)
    • Fix user creation process hanging on SQLite-backed instances (#53)
    • Fix tagged post query on SQLite-backed instances (#55)
    • Fix ActivityPub follows on SQLite-backed instances (#56)

    Upgrading from v0.6.0

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    No additional steps are needed to upgrade from v0.6.0. Follow the instructions in each previous #release if you're upgrading from an earlier version.

    Developers

    Some style changes were made in this version. If you are running a custom build / fork, run make ui to generate the latest stylesheets.

    Contributors

    Thanks for contributing to this release!

    @geekgonecrazy

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.7.0_linux_amd64.tar.gz(26.86 MB)
    writefreely_0.7.0_macos_amd64.tar.gz(21.40 MB)
    writefreely_0.7.0_windows_amd64.zip(27.22 MB)
  • v0.6.0(Dec 10, 2018)

    write freely

    Features

    SQLite support (T529)

    You no longer need MySQL / MariaDB to store data for your instance! Just select SQLite during the configuration process to use it instead of the MySQL driver.

    Reader / local timeline (T554)

    Take a break from writing to see what others on your instance have written! Admins can now turn on the Local timeline option in the Admin panel ([app] local_timeline in config.ini) to enable this for both writers on your instance and the wider public. The local timeline functions just like Read Write.as -- it includes an RSS feed, and is opt-in. Writers can start publishing their work on the feed by going into their blog settings and choosing the Public visibility option.

    More changes

    • Ability to create admin user from the command-line with: --create-admin username:password (T544)
    • Specify non-default configuration file to use with various commands via new -c [filename] flag
    • Host highlight.js and MathJax locally, instead of on CloudFlare (T551)

    Upgrading from v0.5.x

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    No additional steps are needed to upgrade from v0.5.x. Follow the instructions in each previous #release if you're upgrading from an earlier version.

    Contributors

    Thanks to everyone who contributed to this release!

    @BenOvermyer @kaiyou

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.6.0_darwin_amd64.tar.gz(21.30 MB)
    writefreely_0.6.0_linux_amd64.tar.gz(26.75 MB)
    writefreely_0.6.0_windows_amd64.zip(27.10 MB)
  • v0.5.0(Dec 4, 2018)

    write freely

    Features

    • Configure bind address with new bind configuration value (#38, #5)
    • Syntax highlighting support for all programming languages supported in highlight.js (#39)
    • Modify NodeInfo description with new site_description config value
    • Change admin values via the web admin UI (T541)

    Fixes

    • Fix metadata editing in single-user mode (#40)
    • Always show stats on About page if public_stats enabled

    Upgrading from v0.4.x

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    No additional steps are needed to upgrade from v0.4.x. See previous releases if you're upgrading from an earlier version.

    Contributors

    Thanks for contributing!

    @mrvdb

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.5.0_linux_amd64.tar.gz(14.97 MB)
    writefreely_0.5.0_macos_amd64.tar.gz(14.86 MB)
    writefreely_0.5.0_windows_amd64.zip(14.94 MB)
  • v0.4.0(Nov 26, 2018)

    write freely

    Features

    • Work as a standalone server, with TLS (T537)
    • Code syntax highlighting (#31)

    Functional Fixes

    • Fix About page link in Admin dashboard
    • Include About/Privacy page content in page description

    Upgrading from v0.3.x

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    No additional steps are needed to upgrade from v0.3.x. Follow the instructions in each previous release if you're upgrading from an earlier version.

    Contributors

    Thanks to everyone who contributed!

    @mrvdb @koehn

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.4.0_linux_amd64.tar.gz(14.97 MB)
    writefreely_0.4.0_macos_amd64.tar.gz(14.86 MB)
    writefreely_0.4.0_windows_amd64.zip(14.94 MB)
  • v0.3.0(Nov 19, 2018)

    write freely

    Features

    Admin panel

    Dashboard

    Now you can get a basic overview of your application on the admin dashboard. It shows you the app's resource utilization and provides helpful admin commands.

    Currently, the first registered user is always an admin.

    Page editing (T533)

    Make your instance your own by updating your site's About and Privacy pages -- now possible directly from the web. The editor accepts Markdown.

    Other Features

    • Add --init-db flag to create schema in app (T530)
    • Add --reset-pass <username> option for resetting passwords (#25, T534)
    • Federate draft when published to a blog (#9, T526)
    • Support setting created date on new posts (T532)

    Functional Fixes

    • Fix "view blog" links on customize page in single-user mode (#21)
    • Fix "Scheduled" badge appearing when application and database timezones are different (#23)
    • Prevent fatal errors when no ActivityPub response is returned
    • Change Accept activity ID to use blog's origin (#16)
    • Fix MathJax setting not sticking (#28)
    • Fix wrong collection data loaded in RSS feeds on multi-user instances
    • Fix feed and outbox post order in RSS feeds and ActivityPub outboxes
    • Fix em dashes and some glyphs by upgrading Lora

    Others

    • Add -v flag for outputting version

    Upgrading from v0.2.x

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    Important: you'll want to keep config.ini and the files in your keys directory across all upgrades -- don't delete or replace these manually.

    You'll need to manually migrate your database for now. To upgrade, connect to your database and run:

    CREATE TABLE IF NOT EXISTS `appcontent` (
      `id` varchar(36) NOT NULL,
      `content` mediumtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
      `updated` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

    Optionally, run these queries to clean up bad data that might've shown up due to previous bugs, now fixed in this version.

    -- Erroneous values inserted if you tried to enable MathJax on your blog (fixed in #28)
    DELETE FROM `collectionattributes` WHERE collection_id = 0;
    

    Development

    This update contains some style changes. Run make ui to regenerate CSS after pulling in the latest changes.

    Contributors

    Thanks to our contributors!

    @TheJF @BenOvermyer

    Source code(tar.gz)
    Source code(zip)
    writefreely_0.3.0_linux_amd64.tar.gz(14.93 MB)
    writefreely_0.3.0_macos_amd64.tar.gz(14.82 MB)
    writefreely_0.3.0_windows_amd64.zip(14.93 MB)
  • v0.2.1(Nov 13, 2018)

  • v0.2.0(Nov 12, 2018)

    write freely

    New Features

    • See how many fediverse followers your blogs have
    • WriteFreely now works with Pleroma

    Application Fixes

    • Fix individual post ActivityStreams data fetching, so boosting works (#4)
    • Use WriteFreely avatars in social media image preview, instead of Write.as logo

    Installation Fixes

    • Fix template loading on Windows (#2)
    • Fix database errors around default values (#3, #7)
    • Don't unnecessarily connect to DB after configuring multi-user instance
    • Show any errors when server start fails
    • Fix encryption key loading on Windows
    • Move encryption key generation from keys.sh to writefreely --gen-keys

    Installing

    See our guide.

    Upgrading from v0.1

    Download the latest release for your operating system. Stop running your writefreely service, replace all files in your installation with the ones in the archive, and then start your writefreely service again.

    Important: always keep config.ini and the files in your keys directory across all upgrades -- don't delete or replace these manually.

    Database migrations are manual for now! Fun! To upgrade, connect to your database and run:

    ALTER TABLE `remoteusers` DROP `followers`;
    
    Source code(tar.gz)
    Source code(zip)
    writefreely_0.2_linux_amd64.tar.gz(13.63 MB)
    writefreely_0.2_macos_amd64.tar.gz(13.53 MB)
    writefreely_0.2_windows_amd64.zip(13.59 MB)
  • v0.1.0(Nov 10, 2018)

Owner
WriteFreely
Build a digital writing community.
WriteFreely
Markdown - Markdown converter for golang

markdown ?? Talks ?? Join ?? Youtube ❤️ Sponsor Install via nami nami install ma

TxThinking 3 Jun 2, 2022
Mdfmt - A Markdown formatter that follow the CommonMark. Like gofmt, but for Markdown

Introduction A Markdown formatter that follow the CommonMark. Like gofmt, but fo

杨英明 16 Dec 18, 2022
Online server tool to made markdown document.

An authenticated(basic auth with digest) docsify server for private markdown documents. Embedded docsify-mermaid as UML tool.

null 0 Oct 16, 2021
Godown - Markdown to HTML converter made with Go

Godown Godown is a tiny-teeny utility that helps you convert your Markdown files

Kevin Suñer 0 Jan 18, 2022
Glow is a terminal based markdown reader designed from the ground up to bring out the beauty—and power—of the CLI.💅🏻

Glow Render markdown on the CLI, with pizzazz! What is it? Glow is a terminal based markdown reader designed from the ground up to bring out the beaut

Charm 11.3k Dec 30, 2022
Stylesheet-based markdown rendering for your CLI apps 💇🏻‍♀️

Glamour Write handsome command-line tools with Glamour. glamour lets you render markdown documents & templates on ANSI compatible terminals. You can c

Charm 1.4k Jan 1, 2023
The Markdown-based note-taking app that doesn't suck.

Notable I couldn't find a note-taking app that ticked all the boxes I'm interested in: notes are written and rendered in GitHub Flavored Markdown, no

Notable 20.7k Jan 2, 2023
Generate markdown formatted sprint updates based on the Jira tickets were involved in the given sprint.

Generate markdown formatted sprint updates based on the Jira tickets were involved in the given sprint.

Gábor Boros 2 Nov 15, 2021
Effortless customization for markdown-based SvelteKit blogs!

reece Effortless customization for markdown-based SvelteKit blogs! Installation Install using: One-Script Installation (Linux): curl -sfL https://gith

Aadhav Vignesh 0 Dec 11, 2021
A terminal based preview tool for markdown 🍪

Smooth Smooth is a terminal based preview tool for markdown. Features Turning: turn next/previous slide Scroll: scroll up/down slide Search: search wo

ketsu chin 3 May 22, 2022
Parse data and test fixtures from markdown files, and patch them programmatically, too.

go-testmark Do you need test fixtures and example data for your project, in a language agnostic way? Do you want it to be easy to combine with documen

Eric Myhre 20 Oct 31, 2022
⚙️ Convert HTML to Markdown. Even works with entire websites and can be extended through rules.

html-to-markdown Convert HTML into Markdown with Go. It is using an HTML Parser to avoid the use of regexp as much as possible. That should prevent so

Johannes Kaufmann 438 Jan 6, 2023
Produces a set of tags from given source. Source can be either an HTML page, Markdown document or a plain text. Supports English, Russian, Chinese, Hindi, Spanish, Arabic, Japanese, German, Hebrew, French and Korean languages.

Tagify Gets STDIN, file or HTTP address as an input and returns a list of most popular words ordered by popularity as an output. More info about what

ZoomIO 26 Dec 19, 2022
Blackfriday: a markdown processor for Go

Blackfriday Blackfriday is a Markdown processor implemented in Go. It is paranoid about its input (so you can safely feed it user-supplied data), it i

Russ Ross 5.1k Jan 8, 2023
Upskirt markdown library bindings for Go

Goskirt Package goskirt provides Go-bindings for the excellent Sundown Markdown parser. (F/K/A Upskirt). To use goskirt, create a new Goskirt-value wi

Jukka-Pekka Kekkonen 32 Oct 23, 2022
A CLI markdown converter written in Go.

MDConv is a markdown converter written in Go. It is able to create PDF and HTML files from Markdown without using LaTeX. Instead MDConv u

null 42 Dec 20, 2022
A markdown renderer package for the terminal

go-term-markdown go-term-markdown is a go package implementing a Markdown renderer for the terminal. Note: Markdown being originally designed to rende

Michael Muré 253 Nov 25, 2022
A markdown parser written in Go. Easy to extend, standard(CommonMark) compliant, well structured.

goldmark A Markdown parser written in Go. Easy to extend, standards-compliant, well-structured. goldmark is compliant with CommonMark 0.29. Motivation

Yusuke Inuzuka 2.5k Dec 29, 2022
:triangular_ruler:gofmtmd formats go source code block in Markdown. detects fenced code & formats code using gofmt.

gofmtmd gofmtmd formats go source code block in Markdown. detects fenced code & formats code using gofmt. Installation $ go get github.com/po3rin/gofm

po3rin 91 Oct 31, 2022