Jotsy is a self-hosted, free and open-source note taking app with a goal of simplicity in mind

Overview

app icon Jotsy: Just your notes

Jotsy is a self-hosted, free and open-source note taking app with a goal of simplicity in mind. It is powered by Skytable. Read the full blog post here.

App Login page Signup page
app app app

๐Ÿšง This is currently under development

Features

  • ๐Ÿข Multi-user
  • โœ๏ธ Effective and distraction free notemaking
  • ๐Ÿ” Secure authentication and session management
  • ๐ŸŒฑ Extremely simple to self-host
  • ๐ŸŒฒ Extremely light on resources
  • ๐Ÿƒ Extremely lightweight on the browser
  • โš’๏ธ Simple configuration (read more here)

Getting started

  1. First, install docker-compose by following the instructions here
  2. Run this:
    mkdir jotsy && cd jotsy && wget https://raw.githubusercontent.com/ohsayan/jotsy/next/docker-compose.yml && sudo docker-compose up -d
  3. Open your browser and head to http://localhost:2022

Stack

  • Backend:
    • Database: Skytable
    • Language: Rust
    • Framework/tools:
      • Tokio: Asynchronous runtime
      • Axum: A web framework built on top of Tokio
  • Frontend:
    • CSS Framework: Bootstrap
    • Scripting: Pure JavaScript (uses AJAX)
    • Markup: Pure HTML

Contributing

As highlighted in the original blog post, please create issues for any ideas you have; I want to hear them! Want to collaborate (would love some frontend wizard for some help :P)? Shoot me a DM on Twitter.

License

This app is distributed under the Apache-2.0 License.

Comments
  • why can't login ?  myself compile and run

    why can't login ? myself compile and run

    i download u code , compile release and run , signed up is ok. click "signed in", but can't login, it always redirect to login page.

    and , found err by signed up , use name : 123456

    thread 'tokio-runtime-worker' panicked at 'called `Result::unwrap()` on an `Err` value: SkyError(UnexpectedDataType)', src/handlers/signup.rs:88:41        
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace 
    
    bug 
    opened by pkptzx 14
  • [BUG] jotsy-app container fails to start

    [BUG] jotsy-app container fails to start

    Describe the bug

    Having followed the steps in README, the app container fails to run. docker compose logs says:

    jotsy-app-1  | Error: SkyError(ParseError)
    jotsy-skydb-1  | [2022-11-04T11:52:46Z INFO  skyd] Skytable v0.8.0 | https://github.com/skytable/skytable
    jotsy-skydb-1  | [2022-11-04T11:52:46Z INFO  skyd] Using settings from supplied configuration
    jotsy-skydb-1  | [2022-11-04T11:52:46Z WARN  skyd::config::feedback] CLI warnings: Running in `user` mode. Set mode to `prod` in production
    jotsy-skydb-1  | [2022-11-04T11:52:46Z INFO  skyd::dbnet::listener] Server started on skyhash://0.0.0.0:2003
    jotsy-skydb-1  | [2022-11-04T11:52:46Z ERROR skyd::dbnet::tcp] Error: connection reset
    jotsy-skydb-1  | [2022-11-04T11:52:46Z ERROR skyd::dbnet::tcp] Error: connection reset
    

    docker container ls:

    CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS                           PORTS                                   NAMES
    5d6e165da23e   ohsayan/jotsy:latest   "jotsy"                  28 minutes ago   Exited (1) 28 minutes ago                                                jotsy-app-1
    385b8a9cfa54   skytable/sdb:latest    "skyd --noart -h 0.0โ€ฆ"   28 minutes ago   Up 28 minutes                    127.0.0.1:2003->2003/tcp                jotsy-skydb-1
    

    To Reproduce

    1. Run mkdir jotsy && cd jotsy && wget https://raw.githubusercontent.com/ohsayan/jotsy/next/docker-compose.yml && sudo docker-compose up -d
    2. Interrogate the Docker service

    Expected behavior

    jotsy-app container initiates and runs

    Meta (please complete the following information):

    • OS: Fedora 36
    • Version/Commit hash: Tag latest, digest 79b6657e2fc1
    bug 
    opened by varens 3
  • CSRF and XSS

    CSRF and XSS

    At the moment the cookies jotsy_token and jotsy_user aren't setting the HttpOnly (XSS) and Secure flags. Furthermore I also do not see any CSRF protection (SameSite flag and/or CSRF-Token), so scripts like

    <body onload="document.forms[0].submit()">
    <form action="https://jotsy.skytable.io/createnote" method="POST">
    <input type="hidden" name="note" value="Hello there"/>
    <input type="submit" value="Some Button"/>
    </form>
    

    embedded in any website will work.

    opened by PeterUlb 2
  • Feature Requests , i want ...

    Feature Requests , i want ...

    del/merge/group notes: operation like Collections in Microsoft Edge

    search modify paste image : and auto save to server pagination tag/label management

    (frontend)edit auto height

    exports/export zip(markdown and res)/pdf

    ~~public: customer specify note public access , like blog~~

    other: ~~plugin mechanism: above implement by plugin~~ OS tool: mouse select text/image... right click send to jotsy.(config token or login)

    opened by pkptzx 1
  • [FEATURE] logseq like outliner with back-references to the block level , plain text backend and other misc feedback

    [FEATURE] logseq like outliner with back-references to the block level , plain text backend and other misc feedback

    Is your feature request related to a problem? Please describe. nope, just hoping for the next best notetaking system

    Describe the solution you'd like

    1. persuation to consider a logseq style outliner with back-references to the block level (emacs org-mode, obsidian, roam are also note-taking outliners)
    2. persuation to consider a plain text file format backend with regeneratable indexes

    Firstly, thankyou for your attempt at making a note-taking tool in rust.

    Its seems obvious that you are attempting to make a hosted notetaking system for office/collaborative/enterprise-deployment situation. Some things I mention here may arrive from a different angle to your design/vision.

    I also see that skytable is also your baby.

    Unfortunately I didn't get to try out jotsy yet, nor find a youtube demo showing its current 0.1/0.2 versions, except for a few screenshots. As you can see wsl docker-machine setup is a small entry barrier hurdle one needs to overcome. So I'm sorry for being in the blind here, while filing this issue.

    Its fine to close this issue if you have already considered this. I am sure most of what I write below, you would have also already surveyed.

    As a note taking system user, I just wanted to share/provide some feedback, based on my use of other notetaking systems.

    Some general strengths I see in some notetaking systems

    • having a plain text or encrypted text backend ( as compared to web interface with database storage)
      • local machine failure is a real risk/hazard. one safe guards that with backups. But the more infrastructure you need to set up like webservers/databases, can make setting-up and configuring things back to original a big chore, before one can access one's notes. One always need one's notes quick at hand for any daily activity, when daily routine is tracked with one's notes. Notetaking systems like logseq, zettler, dendron, etc save notes in plain text. Additionally, some apps keep an any time regenerate-able database for indexing, linking, caching and the like.
    • while web backend is good, local-apps are better
      • for the same reasons, it reduces time to setup and get going.
      • no need to do infrastructure setup, like configuring and deployment of web backend and database etc
    • syncing to cloud storage
      • this allows for use on multiple devices
      • the advantage of web-only with web-storage is that data is stored in one place, and synchronization is managed easily. the disdvantage is that that host server needs to always run, and local client can't edit offline.
    • Being able to just move/relocate the note-base quickly easily from machine to machine
      • moving becomes easy, when all one has to do, is copy over the note-base and just make the new software just reindex the plain-text files.
    • Easier to backup
      • for the same reasons
    • In plaintext there seem to be some choices: markdown flavor, common-mark, github-mark, djot, yaml, etc. I don't insist on an any given markdown, because one can easily convert between one to another using pandoc. But some human-editable markdown-like standard-fileformat gives a feeling of freedom, no file-format trap, no-lock-in, as well as a ease of edit using whichever editor, though one will usually choose to edit using the same notetaking tool because of instantaneous index updates. Writing auto-structured plaintext/markdown keeps persons writing focus on the note-writing-content instead of the looks/formatting.
    • The hierarchical note taking system has problems when a note can belong to multiple hierarchies.
      • I have come to like the outliner style with the tagging, because a tagging system seems to provide natural and better organization. The date based journaling itself acts like a linear order structure and the tags themselves act as a good descriptor of the content. In most cases it obviates the need for a note with its own descriptive title. When one searches for a note, one searches based on tag, and looks for relevant content by date.
    • When notes are in plain-text and indexes are regenerated, its possible to move/try different note taking systems, without

    I think its a plus if optionally allows the data(notes) to reside outside as plaintext files, while skytable does indexing and other feature support.

    logseq

    • strengths:
      • outliner, with tagging and back reference, plain text markdown, regeneratable indexes, easy to port, easy to backup, easy to get to notes post disaster
      • can do datalog (a query language)
      • can do sci (embedded clojure scripting language)
      • can do a note-graph
      • has mobile/android port
      • has a plugin system
    • neutral
      • cljs lang, (clojurescript), has a REPL, fast interpretted language
    • weaknesses:
      • slow (at least to start)
      • large software size to install ~200Mb!!

    IMHO, logseq has done many things right.

    Other seemingly good contenders as of 20221222

    • zettlr: implementation lang: typescript, Zettlr seems to be best for keeping academic style zettelkastens, specially liked the zotero integration, not an outliner
    • dendron: implementation lang: typescript, requires vscode, not on mobile, some kind of GUID/git based tree
    • emanote: implementation lang haskell
    • Joplin: implementation lang: typescript, not plaintext backend but uses sqlite backend,
    • trillium-notes implementation lang: javascript, not plaintext backend but uses sqlite backend.

    Other notetaking systems seen/considered, less preferred

    Other notetaking systems seen, over the years,, even less preferred

    • boostnote, microsoft-one-note, nixnotes, evernote, standard-notes

    Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered.

    Additional context Add any other context or screenshots about the feature request here.

    enhancement 
    opened by hgkamath 0
  • [QUESTION] How to redirect a page on server side.

    [QUESTION] How to redirect a page on server side.

    I'm learning how Jotsy application works using the cutting-edge technologies such as Rust, Axum, and Tokio. Right now, Jotsy application uses redirect.html to redirect a page, but meta refresh is discouraged by World Wide Web Consortium (W3C) as described here. If the Jotsy app developer decides to stick with meta refresh, it's absolutely fine. I just want to know a different approach to handling redirection, which is to redirect a page on server side. I looked into crates such as reqwest and hyper to do this, but I can't figure this out. Any suggestions will be appreciated.

    improvement 
    opened by blueowlgreenfish 2
  • [FEATURE] Pagination

    [FEATURE] Pagination

    Is your feature request related to a problem? Please describe.

    As discussed earlier, if one has a lot of notes, the browser may crash while loading all of them at once. This is solved with pagination. If anyone wants to work on this, I'd be happy to mentor them.

    Describe the solution you'd like

    With pagination, a subset of the notes will be loaded and further notes will be loaded in fixed size batches as requested.

    Describe alternatives you've considered NA

    Additional context NA

    enhancement C-UI C-data 
    opened by ohsayan 0
  • Feature Requests

    Feature Requests

    • LDAP support: this way, it can be restricted to for instance company users.
    • Edit/Delete single notes, sometimes you want to change a note you made, or delete it.
    C-UI C-data 
    opened by jhjacobs81 2
  • Feature request: Nested notes

    Feature request: Nested notes

    Ability to classify notes into categories without any limits on how much I can nest them, like in CherryTree. There are too many simple note taking applications out there without this feature ;)

    enhancement C-UI C-data 
    opened by aurabindo 7
Releases(v0.2.0-alpha.1)
Owner
Sayan
Fighting with CPU cycles @skytable. Writing open-source code. 99.9985% of the time. He/him
Sayan
Self-Hosted alternative to GitHub Gists

GitPad Self-Hosted GitHub Gists Features Upload code snippets(โœ“ REST API) Syntax Highlighting Comments Versioning through Git Fork gists Gist privacy:

Aravinth Manivannan 52 Dec 22, 2022
The goal of this repository is to have a real world template of a Rust backend using Axum, Diesel, etc.

Axum Diesel Real-World Example A modular Rust backend template based on the Domain-Driven Design (DDD) architecture, utilizing the Axum and Diesel fra

Quentin Piot 11 Sep 22, 2023
A rust web framework with safety and speed in mind.

darpi A web api framework with speed and safety in mind. One of the big goals is to catch all errors at compile time, if possible. The framework uses

null 32 Apr 11, 2022
Hirola is an opinionated web framework for that is focused on simplicity and predictability.

Hirola Hirola is an opinionated web framework for that is focused on simplicity and predictability. Goals Keep it simple. Most Rust web frameworks hav

null 27 Nov 3, 2022
Oso is an open source policy engine for authorization thatโ€™s embedded in your application

Oso What is Oso? Oso is an open source policy engine for authorization thatโ€™s embedded in your application. It provides a declarative policy language

oso 2.8k Jan 4, 2023
Open Source command line client of VRChat Package Manager.

vrc-get Open Source command line client of VRChat Package Manager. Goals Provide Open Source command line client of VRChat Package Manager. Provide mo

null 10 Jan 26, 2023
Rust Open Source Login/Register API

Actix Web API with Rustls (OpenSSL available/Without SSL/TLS too) This API uses Actix Web to serve secure HTTP endpoints, utilizing Rustls for TLS enc

Alzareim 4 Sep 27, 2023
example of a full stack web app (backend and frontend) wrtiten in Rust

rust-fullstack-example An example of creating a full stack web application (backend and frontend) using Rust. Backend Go to ./backend and start the se

mario 41 Dec 16, 2022
Search Confluence from Alfred and open results in your browser.

Alfred Confluence Workflow Search Confluence from Alfred and open results in your browser. Features Search Confluence from Alfred and open results in

Johan M. 26 Nov 7, 2022
Learning Rust: Sample App

mars_calc The App runs on rust takes inpit weight in kg of earth and returns the weight on mars My first rust App Ownership Rules First, letโ€™s take a

Koti Syamala 0 Dec 24, 2021
This is the settings app for Pop!_OS's new COSMIC desktop.

cosmic-settings This is the settings app for Pop!_OS's new COSMIC desktop. It is currently WIP and not ready for use, although if you want to run it a

Pop!_OS 53 Dec 11, 2022
yeenserve is a web app for serving random photos.

yeenserve yeenserve is a simple web app written in Rust that serves random images from a directory. It was written as the backing application for hyen

Mystic 3 Nov 30, 2022
A Rust app for creating RSS Feeds in Notion.

Notion Feed A Rust app for creating RSS Feeds in Notion. Features Manage your RSS sources in a separate Notion page Enable/disable RSS sources Read fe

Alexandru Bereghici 16 Nov 30, 2022
Turn any web page into a desktop app (but, lightweight <1MB)

Intro Turn any web page into a desktop app (but, lightweight <1MB) The bundle will be less than 2MB Demo: https://i.imgur.com/BLr03oF.mp4 Install carg

null 9 Dec 27, 2022
An occult chat app using Cabal ๐Ÿง™โœจ๐Ÿ”ฎ

coven ??โœจ?? An occult chat app using Cabal Uses the cable.rs implementation of the new Cable protocol. For now is a desktop app, but with the magic of

Mikey 7 Nov 2, 2023
A Google-like web search engine that provides the user with the most relevant websites in accordance to his/her query, using crawled and indexed textual data and PageRank.

Mini Google Course project for the Architecture of Computer Systems course. Overview: Architecture: We are working on multiple components of the web c

Max 11 Aug 10, 2022
Ergonomic and modular web framework built with Tokio, Tower, and Hyper

axum axum is a web application framework that focuses on ergonomics and modularity. More information about this crate can be found in the crate docume

Tokio 7.9k Dec 31, 2022
Proxies all incoming connections to a minecraft server of your choosing, while also logging all ping and login requests to a json file and discord webhook.

minecraft-honeypot Proxies all incoming connections to a minecraft server of your choosing, while also logging all ping and login requests to a json f

Cleo 19 Jan 4, 2023
A simple authentication flow using Rust and Actix-web, with a PostgreSQL database and a sveltekit frontend.

Rust-auth-example This repository aims to represent a simple authentication flow using Rust and Actix-web, with a PostgreSQL database and a sveltekit

Kival Mahadew 4 Feb 19, 2023