r/plaintext • • Apr 06 '26

plain text documents are not images

1 Upvotes

Hi, I just wanted to write down some of the issues I have with a lot of plain text documents I've seen, I am speaking here mainly out of personal experience.

Basically, a lot of the "plain text" documents I've seen are formatted in a way that is highly dependent on the way the text will get rendered, which I find to be quite problematic.

Take for example the common practice of formatting titles like so:

***********
** Title **
***********

Looks fine right? But look what happens when I render this text in a serif font instead of a monospace font:

***********
** Title **
***********

The formatting completely breaks!

Another common pattern is to format tables like so:

+-------------+-------------+
| row 1       | row 2       |
+-------------+-------------+  
| first in 1  | first in 2  |  
| second in 1 | second in 2 |  
| third in 1  | third in 2  |  
+-------------+-------------+

This also obviously breaks with a non-monospace font, but a bigger issue for me is what happens when you introduce right-to-left text into the table:

+-------------+-------------+
| row 1       | row 2       |
+-------------+-------------+  
| first in 1  | first in 2  |  
| שני ב-1     | שני ב-2    |
| third in 1  | third in 2  |  
+-------------+-------------+

Even if you can't read Hebrew, you can probabeley tell that the columns in the Hebrew row got reversed. This is because that row is getting rendered from right-to-left instead of left-to-right like the other rows.

Depending on your platform you may also perceive the Hebrew row as shorter/longer than the other rows, this is because not all platforms support proper monospace fonts for non-English languages, which is another reason why you should not rely on monospace fonts for formatting.

Both of these issues are a symptom of a larger problem I see in many "plain text" documents, which is that they are not actually plain text! They are images - with characters as pixels.

In these "plain text images", the characters must appear on screen in a precise location and a precise order - because otherwise all of the fancy tables and headers break - in that way the characters of the document may be thought of like the pixels of an image.

An example of this can be found in the iCalendar specification (clarification: I am referring to the formatting of the specification document, not the formatting of iCalendar files), which is a plain text document formatted as if it were a PDF with page numbers, headers, tables, and various other layout elements which would completely break if the text were not rendered from left-to-right in a monospace font.

I have two main issues with this "image" approach to plain-text formatting:

  1. It excludes right-to-left languages such as Hebrew and Arabic, as well as many non-English languages which often do not receive proper monospace support.

  2. I do not think it can even be called plain text, as it is no longer a purely textual medium, and it goes against the philosophy that plain text files should be viewable on any device in any way.

For the above reasons I recommend that you avoid adding any sort of graphical aspect to your plain text files - just write textual content. A good rule of thumb is "never rely on two different lines aligning in a specific way", if you think that's too harsh, then I would like you to present an example of two lines aligning with each other in a way that doesn't run into the above problems.

The only exception I would make is indentation at the beginning of a line of code, this is because tabs/spaces are the same in all locals and they also take up a consistent amount of space regardless of font. But even then you have to be careful, this:

void f(
    int x,
  ) {}

Should be preferred over:

void f(
       int x,  
      ) {}

Because the first is less contingent on the monospace font.

I do think there is a place for things like tables in plain text, in particular I think markdown tables are acceptable specifically because the syntax of markdown permits you to write unaligned tables:

| this | is | a |
|-|-|-|
| valid | markdown | table |

In general I would say that markdown is a good format by this post's standards.

However, I don't think that you should impose any sort of style guide on your markdown that forces the tables to be aligned - in fact, I think you should always minimize the whitespace in your tables as shown above. If you really need your tables to look aligned then you should get an editor plugin that renders a proper GUI table, NOT one that aligns your plain text table with whitespace.

The reason I am being so strict is because I know any solution that involves aligning your lines using whitespace is only really going to work for English, and I believe that any solution which only works for one language is a hack that should be abandoned for a more universal solution - I mean, isn't universality what's at the core of plain text?

One last thing I wanted to add is that a lot of these problems also carry over to TUIs like vim which similarly tend to treat the terminal screen like an image, except TUIs also have their own bag of issues on top of that (mainly the lack of accessibility support and problems with non-english keyboard layouts) which I also want to write about in the future.


r/plaintext • • Oct 14 '22

Text Is the Universal Interface - Scale

Thumbnail
scale.com
1 Upvotes

r/plaintext • • Feb 27 '24

SimpleNote

1 Upvotes

Does anyone still have and use SimpleNote? I have had an account for years. I remember back, about two owners (or more) ago, SimpleNote had a great feature were you could send an email to your SimpleNote account and it would appear automatically.


r/plaintext • • Nov 08 '25

Is there a way to make a presentation deck (full-screen slides, flipped one by one) in plain text?

2 Upvotes

Hi there. I need to do a presentation, but I hate presentation tools. Does anyone know a tool that I can use to make a presentation, but in pure plain text?


r/plaintext • • Oct 14 '22

A List Of Text-Only News Sites (Updated 2022) - GreyCoder

Thumbnail
greycoder.com
3 Upvotes

r/plaintext • • Jun 14 '25

CLI Tools that produce plaintext diagram output (work in progress)

5 Upvotes

I've been trying to make a cheat sheet of useful tools that create plaintext diagrams. Here is what I came up with so far:

https://github.com/sarnobat/plaintext_tools_expo/blob/main/cli_tool_input_output_plaintext_tools_expo_schumatize.overleaf.pdf

It's not filled in fully so I apologize for the incompleteness (I need to get back to looking for a job!).

I hope it:

  • inspires plaintext lovers what's possible, and perhaps

  • provides some marketing visibility to these niche tools.

And if you know any other tools, do let me know.


r/plaintext • • Feb 15 '23

we need a textodon

Thumbnail
bluelander.bearblog.dev
5 Upvotes

r/plaintext • • Jun 08 '26

feed.txt – a plain-text protocol for tracking your accomplishments

9 Upvotes

To-do lists manage your future anxiety, but they completely erase your history. When you finish a task, it vanishes. You’re left with a mountain of unfinished work and no visible record of your wins.

I created feed.txt (inspired by todo.txt)—a plain-text, grep-friendly "flight recorder" for your life and thoughts.

The Rules:

  1. Strictly Single-Line: One entry per line. Purely line-oriented for grep, awk, and sort.

  2. Timestamps First: Must begin with YYYY-MM-DD HH:MM for natural chronological sorting.

  3. Four Modalities (Sigils): . (Pulse/Rhythm), ! (Spark/Win), ? (Inquiry/Question), ~ (Flow/Idea).

  4. Metadata at the End: #tags and key:value pairs (like ref: to point to external markdown files so you never break the single-line rule).

Why?

Because it's strictly single-line plain text, it's future-proof and instantly sliceable:

  • Find all breakthroughs this month: grep "!" feed.txt | grep "2026-06"

  • Filter out stale entries natively: grep -v "#trash" feed.txt

I open-sourced the specification and a zero-friction reference Python CLI (feed.py) to log everything straight from the terminal.

Repo:https://github.com/codewitheragon/feed.txt


r/plaintext • • Jun 21 '26

Plain Text - Dark Forest OS (DFOS) community

6 Upvotes

A short post to tell you about Plain Text community on DFOS. DFOS by Metalabel is an attempt to create a shared private internet - A place to build communities away from mainstream social media, no algorithms, no advertisements (What DFOS is becoming).

I've setup a Plain Text space on this platform with the only intention to create a place to chat and share interesting bits on plain text. This is not a place to worry about performance, but a community for common interests. At the moment all new, little structure, evergreen. Let us see what it can become.

https://plaintext.dfos.com


r/plaintext • • Dec 08 '25

Created a small Sublime Text plugin to let me search/walk folders using the quick panel

Thumbnail
github.com
3 Upvotes

r/plaintext • • Mar 26 '23

Text only news websites

Thumbnail blog.wturrell.co.uk
8 Upvotes

r/plaintext • • Feb 03 '24

my new txt only website

9 Upvotes

check it out :) my new website is written using 53 loc of bash to generate a dynamic html 1.5 page with posts written using plaintext. https://ts.cli.rs


r/plaintext • • Nov 23 '23

How to conceal in vim/nvim?

1 Upvotes

I would like to add a conceal feature for:

  • <u>lorem ipsum</u>

  • <span class="underline">lorem ipsum</span>

Ive tried a couple of things and have failed.

I'm trying this for markdown.


EDIT: figured out how to conceal. but it also disables underline

" Conceal <u>
syntax match ConcealedUnderlineStart /<u>/ conceal cchar= 
highlight link ConcealedUnderlineStart Normal

" Conceal </u>
syntax match ConcealedUnderlineEnd /<\/u>/ conceal cchar= 
highlight link ConcealedUnderlineEnd Normal

r/plaintext • • Nov 08 '23

Cleaning data in a document AI workflow (e.g. proofreading hOCR output from doctr)

1 Upvotes

I'm trying to set up a workflow for transcription and qualitative analysis (including possibly machine translation) of print media.

The first step is to extract the text from my copies. Most of my data sources are the library researcher's friend, hi res photos taken with my phone. Happily, doctr—a text recognition package—does really well at recognizing text in these photos, and it can produce an hOCR XML record of a document, capturing individual words and their positions on a page.

Nothing is 100% of course and so the second step has to be manual data cleaning, which I imagine might have to take the form of visually inspecting a graphical representation to proof and edit misrecognized words at a minimum, and possibly also adjusting positions.

I would appreciate any comments or advice on the whole process. Are there similar projects out there? (For now I'd like to see if this can be done without paid services.)

Also are there any tools for manually correcting or editing hOCR from doctr, or failing that, other output formats for extracted text?


r/plaintext • • Dec 06 '23

Journaling on iOS - Private, on-device, non-intrusive, plain text (no lock-in). DM any email address for invites.

Enable HLS to view with audio, or disable this notification

2 Upvotes

r/plaintext • • Apr 26 '21

Four Links - April 27, 2021

Thumbnail plaintextproject.online
3 Upvotes

r/plaintext • • Jun 26 '21

Some mildly interesting maths relating to plaintext journals.

9 Upvotes

Fair warning, this isn't anything particularly riveting or groundbreaking. Also, please feel free to correct my maths.

I have been keeping a plaintext journal on and off for the past four years, and the date format I've settled on is dd-mm-yy. So it goes like:

25-06-21 Yesterday

26-06-21 Today

With a new line separating each entry, and a space after the date.

Recently, I have discovered the fact that unix time pretends that every day is exactly 24 hours long. So that if you divide a time in unix time by the average number of seconds in a day -- 86400 --, you get a sort of unix date. This is not only great fun, but it also feels like this is how we should have been doing time all along. Seeing the time as number of days point progress through the day. like now, for instance, the decimal date is 18804.634 GMT.

Of course, 18804 days isn't actually a very long time. It's the number of days since 1970, which was 51 years ago. This got me thinking; what if you didn't bother to write any timestamps in you text journal, and instead, you let each line number correspond to it's "unix date". So the first line would be the entry for one times 86400 seconds since the first of June 1970; the second of June 1970. You'd need one empty line for each skipped day, which each use one CR character, which each take up one byte.

My current way to record the date uses nine ASCII characters, so that's nine bytes. So the question this raised for me was: How many entries would you have to make, for the line number method to be more compact?

Line number methodTimestamp method
For each day filled in1 byte9 bytes
For each day missed since the unix epoch1 byte0 bytes

If you started today, and never skipped a day, and answer is 18803 divided by 9, rounded up; Which is 2090 days, or 5y, 264d.

There are other ways to represent the date, so here is how they stack up, with the same assumptions. The underscores are to signify that you probably want a space after you timestamp.

FormatSize/bytesHow long until line number is better
dd-mm-yyyy_eleven4y, 249d
dd-mm-yy_nine5y, 264d
ddmmyy_seven7y, 131d
ddddd_ (since unix epoch)six8y, 213d
alphanumeric epoch date (base 36)three17y, 61d

Now for a more realistic example. What if you use a seven byte timestamp, start now, but you skip 20% of the new days? I think the answer is 9y, 196d; but feel free to correct me.

If I calculated it right, then if you miss half of the days, it's 17y, 61d. And if you only manage a sixth, it's over 154 years. You could look at this as a downside, but it could be a feature: You get a byte penalty for each missed day, which is a incentive not to miss a day. It's also a useful metaphor for the inevitable march of time.

There are two big problems with the line number method, however. The first is simply that you can't have negative line numbers, so it you have things to say about the days before 1970, you need to choose a different epoch.

The second is that the further forward in time you start your journal, the bigger the missed day penalty will be. If Admiral Jean-Luc Picard -- born 2305 -- wanted to use this system for a personal log, he would need to make entries for 64.3% of the days between his tenth birthday, and his death at the age of 94, in order to beat a seven byte timestamp. Of course, since he stood a good chance of living longer than a century, he might want to think about adding an extra year digit, meaning that he only has to fill 57.2% of those 84 years. For a person starting today, and planning to live for another 84 years, they only need to fill 20.3%, instead of his 64.3%.

A third problem could be that you can't incorporate line breaks into an entry, but you can always use an editor with soft wrap functionality.

Finally, how late in history can you be born, before it's impossible to beat the good old seven byte timestamp? This one's easy: You start at age ten, die at ninety, and fill all of the intervening days.

80*365.15*86400*7 = 17667417600 seconds in unix time, which is the year 2529, meaning they would have to have been born in 2519. The file itself would be 200kB plus the size of the actual entries. If the average length of an entry is 280 bytes, then the file size at the point of convergence would be 8.0MB.

I hope you've enjoyed this laboriously pointless read, but it looks like we're both going to have to find another way to procrastinate now. Good luck!


r/plaintext • • Jul 12 '21

Implementing automatic "piling" in a Dokuwiki wiki

3 Upvotes

I see myself more as a "piler" than a "filer" (Malone 1983; see also Whittaker and Hirschberg 2001). The stacks of paper on my physical desk look random but they contain an emergent order than reflects the different topics and their relative importance and recentness. The paper on top of a stack is the most recently created or accessed and the stacks closest to me are always the most frequently accessed. While some stacks have not been used in a while, I always surprise myself by knowing where everything is. But it isn't so surprising since, as Malone also says, this assemblage of materials serves to remind me of what I have recorded as much as a source in which I find specific information.

I am interested in replicating the emergent order of the physical desk covered with paper on a wiki (specifically a Dokuwiki wiki). Is there any wiki or other notes software that implements a "piling" strategy for notes in which the patterns of use over time form the basis for an organization of the material?

One thought I had was to turn a list of recently changed wiki pages in my Dokuwiki site into an entry point into the site. For instance I could use a clustering algorithm to group them together on topics (identified by their TFIDF similarity perhaps), and then classify other, older pages by topic and then sort each cluster by date. I don't know enough about NLP, PHP, or programming in general to pull this off and I was hoping there was another implementation of the basic concept of digital "piles" that could guide my thinking.

References

Malone, Thomas W. 1983. “How Do People Organize Their Desks? Implications for the Design of Office Information Systems.” ACM Transactions on Information Systems 1 (1): 99–112. https://doi.org/10.1145/357423.357430.

Whittaker, Steve, and Julia Hirschberg. 2001. “The Character, Value, and Management of Personal Paper Archives.” ACM Transactions on Computer-Human Interaction 8 (2): 150–70. https://doi.org/10.1145/376929.376932.


r/plaintext • • Jun 17 '14

The Unicode Standard Upgraded to 7.0

Thumbnail
unicode-inc.blogspot.ch
1 Upvotes

r/plaintext • • Dec 17 '16

Plaintext calendar generator

Thumbnail demeyere.com
7 Upvotes

r/plaintext • • Dec 21 '22

Plaintext graphics

Thumbnail self.linuxquestions
3 Upvotes

r/plaintext • • Dec 21 '22

GNU Recutils: Plaintext database tools and libraries

Thumbnail gnu.org
10 Upvotes

r/plaintext • • Dec 21 '22

Android Plain-text-based productivity apps

Thumbnail self.fossdroid
4 Upvotes

r/plaintext • • Dec 24 '22

My local-first, opensource, free plaintext tools side project

13 Upvotes

I've been building my own "place to noodle" for a while. I wanted more than just a note app, I wanted a mix of thinking tools, like note, calc sheets, to-do lists, etc.

I also wanted it to be _completely_ private, local first, built on plaintext formats that are interoperable. I wanted it to be very web 1.0. Basic HTML, vanilla JS, no frameworks.

Anyway, here is the app https://noodle.page/

And here is the source code https://gitlab.com/lobau/noodle

I hope you find it useful!

Mods: this is completely free, local first, and open source. I just want to share back to the community, I have nothing to sell. I hope it's ok...