An endless drawing canvas desktop app made with Tauri (Rust) and React ๐ŸŽจ โœ๏ธ

Overview

logo app

Table of Contents

Introduction

Pointless is an endless drawing canvas that provides useful features when you're in need for a simple whiteboard/note app.

It is build using Tauri (Rust) and React with a pure SVG canvas and local files are saved with brotli compression to ensure small file sizes.

โ—๏ธ Currently, this app can only be build locally. Anytime soon there will be public releases available with prebuild binaries for MacOS, Windows and Linux.

๐Ÿ“š โœ๏ธ Feel like contributing? Submit an issue with your ideas (or bugs) and we'll discuss it.

Features

  • Save as PNG
  • Save as JPG
  • Toolbar
    • Undo
    • Redo
    • Pan
    • Clear
    • Zoom in
    • Zoom out
    • Scale to fit
    • Create arrow shapes
    • Create rectangle shapes
    • Create ellipse shapes
    • Text
  • Create folders
  • Save/load state from file
  • Light/dark theme

Prerequisites

Installation

$ git clone https://github.com/kkoomen/pointless.git && cd pointless
$ yarn install

Development

Starting the development server can be done with yarn run tauri dev

Creating a build

Creating a build can simply be done with yarn run tauri build

License

Pointless is licensed under the GPL-3.0 license.

Comments
  • Error while building Pointless

    Error while building Pointless

    Hi there, i'm currently trying to install Pointless. I'm interested in the project and i want to check it out, and maybe help in the development. Like the ReadMe says, i run yarn install and then yarn run tauri build, at first i had to install few system libs but then when yarn was bundling, i came across this error below. I don't understant what i have to do next, i would appreciate for you to look into it. Thank you.

    โžœ  pointless git:(master) yarn run tauri build
    yarn run v1.22.19
    $ tauri build
         Running beforeBuildCommand `npm run build`
    
    > [email protected] build
    > react-scripts build
    
    Creating an optimized production build...
    Compiled successfully.
    
    File sizes after gzip:
    
      109.14 kB  build/static/js/main.396e851f.js
      9.92 kB    build/static/css/main.06288039.css
      1.78 kB    build/static/js/787.8050ff47.chunk.js
    
    The project was built assuming it is hosted at /.
    You can control this with the homepage field in your package.json.
    
    The build folder is ready to be deployed.
    You may serve it with a static server:
    
      yarn global add serve
      serve -s build
    
    Find out more about deployment here:
    
      https://cra.link/deployment
    
       Compiling pointless v0.1.0 (/home/dilec/pointless/src-tauri)
        Finished release [optimized] target(s) in 29.31s
        Bundling pointless_0.1.0_amd64.deb (/home/dilec/pointless/src-tauri/target/release/bundle/deb/pointless_0.1.0_amd64.deb)
        Bundling pointless_0.1.0_amd64.AppImage (/home/dilec/pointless/src-tauri/target/release/bundle/appimage/pointless_0.1.0_amd64.AppImage)
    Error running CLI: failed to bundle project: error running appimage.sh: error running appimage.sh: `+ export ARCH=x86_64
    + ARCH=x86_64
    + mkdir -p pointless.AppDir
    + cp -r ../appimage_deb/data/usr pointless.AppDir
    + cd pointless.AppDir
    ++ dirname '{}'
    + find /usr/lib /usr/lib32 /usr/lib64 /usr/libexec /usr/libx32 -name WebKitNetworkProcess -exec mkdir -p . ';' -exec cp --parents '{}' . ';'
    ++ dirname '{}'
    + find /usr/lib /usr/lib32 /usr/lib64 /usr/libexec /usr/libx32 -name WebKitWebProcess -exec mkdir -p . ';' -exec cp --parents '{}' . ';'
    ++ dirname '{}'
    + find /usr/lib /usr/lib32 /usr/lib64 /usr/libexec /usr/libx32 -name libwebkit2gtkinjectedbundle.so -exec mkdir -p . ';' -exec cp --parents '{}' . ';'
    + wget -q -4 -O AppRun https://github.com/AppImage/AppImageKit/releases/download/continuous/AppRun-x86_64
    + chmod +x AppRun
    + cp usr/share/icons/hicolor/[email protected]/apps/pointless.png .DirIcon
    + ln -s usr/share/icons/hicolor/[email protected]/apps/pointless.png pointless.png
    + ln -s usr/share/applications/pointless.desktop pointless.desktop
    + cd ..
    + wget -q -4 -O linuxdeploy-plugin-gtk.sh https://raw.githubusercontent.com/tauri-apps/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh
    + wget -q -4 -O linuxdeploy-x86_64.AppImage https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
    + chmod +x linuxdeploy-plugin-gtk.sh
    + chmod +x linuxdeploy-x86_64.AppImage
    + OUTPUT=pointless_0.1.0_amd64.AppImage
    + ./linuxdeploy-x86_64.AppImage --appimage-extract-and-run --appdir pointless.AppDir --plugin gtk --output appimage
    linuxdeploy version 1-alpha (git commit ID 56760df), GitHub actions build 85 built on 2022-06-14 00:36:51 UTC
    `
    error Command failed with exit code 1.
    info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
    
    
    
    
    opened by DilecPadovani 9
  • First PR

    First PR

    This PR did about two things

    1. Make constants for some fixed numbers, such as buffer_size
    2. Remove un used crates components

    I think we can separate the front and back ends so that the structure is relatively clear. I try to add GitHub Action CI to cargo, but I encounter some problems.

    opened by Jzow 6
  • Reduce unnecessary re-redenders

    Reduce unnecessary re-redenders

    Hi @kkoomen , I noticed that in the Paper component, there are many unnecessary re-renders. Instead, we could use composition and redux to reduce the number of re-renders with selectors. We can also store coordinates on mouse movement with useRef or createRef without calling useState and call dispatch when we need. I think we can avoid rendering the toolbar, palette, library and other icons when we are moving the cursor for example.

    I attach two videos to show where re-renders occur:

    https://user-images.githubusercontent.com/12563425/168416059-216d397e-ce4d-4ac1-a6f6-c93ce0c28e08.mp4

    https://user-images.githubusercontent.com/12563425/168416063-4de51680-e6ff-4669-b633-17fe2f3011a0.mp4

    enhancement 
    opened by aldovandus 4
  • Transparent mode

    Transparent mode

    Hey! I think it's a good idea to support a transparent mode where you can draw on a canvas that overlays the active screen.

    This way we can highlight or explain something that we're seeing on the browser or somewhere else. I can say the problem or challenge might be that on macOS when an app goes to fullscreen mode, no other apps can be opened on top of that.

    enhancement good first issue 
    opened by hesan-aminiloo 4
  • Add the shortcut to undo using ctrl + z

    Add the shortcut to undo using ctrl + z

    The shortcut to undo with ctrl + z is missing. It would be useful for windows and linux users. I made a simple commit : https://github.com/aldovandus/pointless/commit/9469c04082a818f83e30e51ffb089731acf15dc2 If it's ok, I can create a pull request.

    enhancement 
    opened by aldovandus 4
  • chore(deps): bump tauri from 1.0.6 to 1.0.7 in /src-tauri

    chore(deps): bump tauri from 1.0.6 to 1.0.7 in /src-tauri

    Bumps tauri from 1.0.6 to 1.0.7.

    Release notes

    Sourced from tauri's releases.

    tauri v1.0.7

    Updating crates.io index

    Cargo Audit

    Fetching advisory database from `https://github.com/RustSec/advisory-db.git`
          Loaded 469 security advisories (from /home/runner/.cargo/advisory-db)
        Updating crates.io index
        Scanning Cargo.lock for vulnerabilities (458 crate dependencies)
    Crate:     xml-rs
    Version:   0.8.4
    Warning:   unmaintained
    Title:     xml-rs is Unmaintained
    Date:      2022-01-26
    ID:        RUSTSEC-2022-0048
    URL:       https://rustsec.org/advisories/RUSTSEC-2022-0048
    Dependency tree:
    xml-rs 0.8.4
    โ””โ”€โ”€ plist 1.3.1
        โ””โ”€โ”€ tauri-codegen 1.0.4
            โ”œโ”€โ”€ tauri-macros 1.0.4
            โ”‚   โ””โ”€โ”€ tauri 1.0.7
            โ”‚       โ”œโ”€โ”€ tauri 1.0.7
            โ”‚       โ”œโ”€โ”€ restart 0.1.0
            โ”‚       โ””โ”€โ”€ app-updater 0.1.0
            โ””โ”€โ”€ tauri-build 1.0.4
                โ””โ”€โ”€ app-updater 0.1.0
    

    warning: 1 allowed warning found

    [1.0.7]

    • Escape glob special characters in files/directories when dropping files or using the open/save dialogs.
      • bcd9dc7f fix(core): escape glob characters in drop/dialogs , closes #5234 (#5237) on 2022-11-08

    Cargo Publish

    Updating crates.io index
       Packaging tauri v1.0.7 (/home/runner/work/tauri/tauri/core/tauri)
       Verifying tauri v1.0.7 (/home/runner/work/tauri/tauri/core/tauri)
     Downloading crates ...
      Downloaded futures v0.3.25
      Downloaded generic-array v0.14.6
      Downloaded futures-macro v0.3.25
      Downloaded block-buffer v0.10.3
      Downloaded convert_case v0.4.0
      Downloaded globset v0.4.9
      Downloaded heck v0.3.3
      Downloaded cpufeatures v0.2.5
      Downloaded http v0.2.8
    </tr></table> 
    

    ... (truncated)

    Commits
    • 2e1bd04 fix(cli.js): set version to 1.2.0
    • 45a5cd5 Apply Version Updates From Current Changes (#5295)
    • 3afccfc chore(deps): update wry to 0.22 (#5573)
    • 1aba178 feat(ci): define workspace for rust-cache, improving cache key (#5559)
    • 878421b fix: Add WASM files to Vite Allow List and change devPath to localhost to fix...
    • 777c086 feat(ci): improve cache usage
    • 60e0860 chore(ci): do not cache artifacts-updater on failure
    • d8b996c chore(changes): adjust config-schema build scripts
    • 7aaf27c fix(bundler): load WiX DLLs on Github Actions (#5552)
    • 014aeca fix(ci): use python 3.10 on bench workflow (#5550)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies rust 
    opened by dependabot[bot] 1
  • It's disappointing that there is no installer for windows or a video that explains how to install

    It's disappointing that there is no installer for windows or a video that explains how to install

    I downloaded git for windows from https://git-scm.com/download/win the first line git clone https://github.com/kkoomen/pointless.git && cd pointless worked next lines say yarn: command not found at least make pictures of how to install :(

    opened by fireheart2008 1
  • Reduce unnecessary component re-renders

    Reduce unnecessary component re-renders

    To avoid rendering the library and info components, I moved them out of the paper component, creating a container component. Next, I created redux selectors so that I could easily get the current paper and the current folder. This is an example:

    import { createSelector } from '@reduxjs/toolkit';
    import { getLibraryPapers } from '../library/get-papers';
    import { getCurrentPaperId } from './get-paper-id';
    
    const getCurrentPaper = createSelector(getLibraryPapers, getCurrentPaperId, (papers, paperId) =>
      papers.find((paper) => paper.id === paperId),
    );
    
    export { getCurrentPaper };
    
    

    After that I used these selectors in the Info component.

    const Info = () => {
      const [open, setOpen] = useState(false);
      const paper = useSelector(getCurrentPaper);
      const folder = useSelector(getFolder);
    ....
    

    I think the component is more readable this way. With this logic you can also move other components out of the paper component, such as: Palette and Toolbar. This way, during operations done on the paper, only this one will be rendered, while the others only when needed.

    opened by aldovandus 1
  • The cursor only moves during erasing

    The cursor only moves during erasing

    Hi, maybe i found a bug :D. When you choose the eraser, the cursor only moves during erasing. I think it would be better if the cursor moved all the time, so you can figure out precisely where to start erasing. What do you think? I have attached a video.

    https://user-images.githubusercontent.com/12563425/168872050-65c8562c-9195-466b-8393-3fcf9763c54a.mp4

    opened by aldovandus 1
  • main.rs file proc macro panicked

    main.rs file proc macro panicked

    There is a problem in compiling this line of code by local cargo

    error message:

    proc macro panicked
    message: The `distDir` configuration is set to `"../build"` but this path doesn't existrustc
    
    opened by Jzow 1
  • chore(deps): bump tauri from 1.0.6 to 1.0.8 in /src-tauri

    chore(deps): bump tauri from 1.0.6 to 1.0.8 in /src-tauri

    Bumps tauri from 1.0.6 to 1.0.8.

    Release notes

    Sourced from tauri's releases.

    tauri v1.0.8

    Updating crates.io index

    Cargo Audit

    Fetching advisory database from `https://github.com/RustSec/advisory-db.git`
          Loaded 474 security advisories (from /home/runner/.cargo/advisory-db)
        Updating crates.io index
        Scanning Cargo.lock for vulnerabilities (452 crate dependencies)
    Crate:     xml-rs
    Version:   0.8.4
    Warning:   unmaintained
    Title:     xml-rs is Unmaintained
    Date:      2022-01-26
    ID:        RUSTSEC-2022-0048
    URL:       https://rustsec.org/advisories/RUSTSEC-2022-0048
    Dependency tree:
    xml-rs 0.8.4
    โ””โ”€โ”€ plist 1.3.1
        โ””โ”€โ”€ tauri-codegen 1.0.4
            โ”œโ”€โ”€ tauri-macros 1.0.4
            โ”‚   โ””โ”€โ”€ tauri 1.0.8
            โ”‚       โ”œโ”€โ”€ tauri 1.0.8
            โ”‚       โ”œโ”€โ”€ restart 0.1.0
            โ”‚       โ””โ”€โ”€ app-updater 0.1.0
            โ””โ”€โ”€ tauri-build 1.0.4
                โ””โ”€โ”€ app-updater 0.1.0
    

    warning: 1 allowed warning found

    [1.0.8]

    • Fix the filesystem scope allowing sub-directories of the directory picked by the dialog when recursive option was false.
      • f0602e7c Merge pull request from GHSA-6mv3-wm7j-h4w5 on 2022-12-22

    Cargo Publish

    Updating crates.io index
       Packaging tauri v1.0.8 (/home/runner/work/tauri/tauri/core/tauri)
       Verifying tauri v1.0.8 (/home/runner/work/tauri/tauri/core/tauri)
     Downloading crates ...
      Downloaded alloc-no-stdlib v2.0.4
      Downloaded futures-executor v0.3.25
      Downloaded http v0.2.8
      Downloaded typenum v1.16.0
      Downloaded waker-fn v1.1.0
      Downloaded xattr v0.2.3
      Downloaded rand_core v0.5.1
      Downloaded rand_pcg v0.2.1
      Downloaded brotli-decompressor v2.3.2
    </tr></table> 
    

    ... (truncated)

    Commits
    • 72389b0 Merge pull request from GHSA-6mv3-wm7j-h4w5
    • 4f2fd4d chore: run cargo fmt
    • cf09864 chore(cli): fix clippy warnings
    • d7ffa7f chore: addition to previous commit
    • 0150207 chore: fix clippy warnings
    • a02c6c4 chore(deps) Update Rust crate toml to 0.5.10 (#5836)
    • cd8c074 feat(cli): add support for Cargo's workspace inheritance for the package vers...
    • f7a080a fix(bench): Result interpretation problems (#5798)
    • bca09f7 feat(tauri-build): add option to specify Windows manifest, closes #5584 (#5730)
    • 2bf9c27 fix(ci): use client-payload input to trigger cli.js publish workflow
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies rust 
    opened by dependabot[bot] 0
Releases(v1.1.2)
Owner
Kim ้‡‘ๅฏๆ˜Ž
Vim enthusiast; Fullstack Software & QA engineer
Kim ้‡‘ๅฏๆ˜Ž
A robust, speedy and simple Pokรฉdex, made with โค๏ธ using Rust (backend) and ReactJS (frontend)

Pokee A robust, speedy and simple Pokรฉdex, made with โค๏ธ using Rust (backend) and ReactJS (frontend) ??๏ธ Overview: โ—‹ Which parts are you most proud of?

Bruno Silva 2 Aug 1, 2022
A tauri implementation of todomvc

tauri-todomvc This is an implementation of tastejs/todomvc built using : tauri sqlite for store data react jotai typescript Preview Development Requir

enpitsulin 4 Sep 29, 2022
BevyReact - Using Bevy and Rust to build a project that should coexist with React

BevyReact - Using Bevy and Rust to build a project that should coexist with React

null 15 Nov 11, 2022
Wallhaven desktop app made with Electron + React + TypeScript

Wallhaven Desktop This project is not owned by wallhaven.cc, we just use their API. How to use You can download the application in this link In order

Luis 7 Dec 2, 2022
A desktop app to explore your postgres databas enad make queries to it. This was made for Techathon 2021.

Data elephant A simple database administration tool for psotgres built with web technologies. Supports schema introspection and simple SQL queries. Te

Alexander Jernstrรถm 1 Mar 11, 2022
a drawing tool with ReactJS

This is a drawing tool with FabricJS, written in react

mufang 2 Dec 16, 2022
WALDO's Desktop Application made with electron and react.js

waldo.electron.app WALDO's Desktop Application made with electron and react.js b

waldo.vision 28 Oct 21, 2022
๐ŸŽฎ 2048 clone (React/TypeScript/Redux). No canvas.

2048 โ€ข Demo This is a reimplementation of Gabriele Cirulli's excellent 2048 game, built with React, Redux and TypeScript. Unlike other React-based imp

Mat Sz 63 Nov 28, 2022
GitHub Desktop is an open source Electron-based GitHub app.

GitHub Desktop is an open source Electron-based GitHub app. It is written in TypeScript and uses React.

GitHub Desktop 16.5k Dec 31, 2022
Faery-catwalk - A desktop app for viewing GLTF models with animations, with specific support for multi-model files

faery-catwalk A desktop app for viewing GLTF models with animations, with specif

Talin 3 Apr 1, 2022
A small web app that tries to imitate the desktop web version of amazon site

A small web app that tries to imitate the desktop web version of amazon site, you can add items to the basket, delete them, and have your user authentication feature thanks to Firebase.

Murad Rahmanzada 16 Aug 22, 2022
Modern desktop RSS reader built with Electron, React, and Fluent UI

Modern desktop RSS reader built with Electron, React, and Fluent UI

Haoyuan Liu 4.2k Dec 29, 2022
A minimalistic manga reader for desktop built with React and Django

A minimalistic manga reader/server for serving local manga images on desktop browser.

Padam Upreti 13 Sep 24, 2022
Twitch-chat-viewer: A desktop application built with React + typescript and Electron JS

A desktop application built with React + typescript and Electron JS to check your Twitch without having to use the searcher and being in top of all windows.

guillerp 3 Apr 27, 2022
A junction between the application of the knowledge acquired throughout the study of ReactJs and a brief minimalist redesign of the Whatsapp application in its desktop version.

Whatsapp Clone Tecnologias | Projeto | Use ?? Tecnologias Esta aplicaรงรฃo foi desenvolvida com as seguintes tecnologias: HTML 5 CSS 3 JavaScript React

Ernane Ferreira 6 Feb 21, 2022
A windows desktop application that helps you manage your notes and txt files.

txt note manager A windows desktop application that helps you manage your notes and txt files. Shows all txt files in a folder of your choice. Make ne

Kevin Hoang 1 May 7, 2022
๐Ÿ‘ Responsive Mobile-sized Wrapper for React - Easily prototype your mobile-sized web apps with desktop support

react-mobile-sized-view Featured on reactjsexample.com(thx editor ?? ) ?? Responsive Mobile-sized Wrapper for React ?? Examples โš ๏ธ Warning: The follow

Junho Yeo 23 Nov 24, 2022
A simple open-source, cross-platform, TOTP-based Authenticator for desktop that even your grandma could use :)

OpenAuthenticator A simple open-source, cross-platform, TOTP-based Authenticator for desktop that even your grandma could use :) Features Install and

Arsh 4 Nov 27, 2021
A cross-platform desktop application of tools for developers

A cross-platform desktop application of tools for developers ?? Online Web This website provides online version of the same tools echoo ?? Offline Cli

Kyle 136 Dec 29, 2022