Getting Started

You can quickly get started with the in-broswer memodify. Please visit

https://memodify.app

You will see an alert at left-bottom and you can import a sample data set there by clicking a button to import. The data set has some notes, labels and roles as a manual and samples.

It's easy to start using memodify with private bwowsing/incognito mode because the imported data has gone when you close the window.

Remarkable Features

MDX

MDX allows you to use JSX in your markdown content. You can define your components in your notes.

Memodify also has builtin components which support Chart.js and Mermaid. You can easily embed charts and diagrams into your notes.

Charts (Chart.js)

You can embed a few types of charts supported by Charts.js. Now Bar, Line and Scatter charts are supported as builtin component.

Bar chart sample
export const width = 256*1.414;
export const height = 256;
export const style = { backgroundColor: "white", padding: "0 4px" }
export const options = {
  responsive: false,
  maintainAspectRatio: false,
  plugins: {
    legend: { position: "bottom" },
    title: { display: true, text: "Chart.js chart" },
  },
}
export const labels = ["January", "February", "March", "April", "May", "June", "July"];
export const barData = {
  labels,
  datasets: [
    {
      label: "Dataset 1",
      data: labels.map(() => Math.random() * 100),
      backgroundColor: "rgba(255, 99, 132, 0.5)",
    },
    {
      label: "Dataset 2",
      data: labels.map(() => Math.random() * 100),
      backgroundColor: "rgba(53, 162, 235, 0.5)",
    },
  ],
};
<chartjs.Bar style={style} width={width} height={height} options={options} data={barData} />

Diagrams (Mermaid)

You can embed diagrams supported by Mermaid.

Caution

Caution When using MDX feature in Memodify, it is important to only use content from trusted sources. MDX can potentially execute malicious code, known as self-XSS, which can compromise your device's security. I recommend only using MDX with content that you have personally created or obtained from a trusted source. Use this feature at your own risk, and always be vigilant when inputting or importing content into the MDX editor.

Math expressions (KaTeX)

You can use KaTeX to render math expressions.

Syntax Highlighting

Syntax highlighting is supported with Prism. Lots of languages are recognized. Here is the supported languages.

```javascript
function main() {
  console.log("hello, world.");
}
```
```yaml
name: Run a workflow
on:
  push:
    branches:
      - master
      - release/[0-9]+\.[0-9]+
env:
  SLACK_CHANNEL: general
```

Palette Interface

Command palette

You can use command palette with command + shift + p.

Note palette

You can focus on a note with note palette. It's activated with command + p.

Per-note encryption

It's supported to encrypt the focused note body.

crypto:encrypt note body opens a dialog and you can enter a passphrase. It converts the body to a JSON object like this.

{
  "ciphertext": "dtsLElgKr9p4r5L8xZoiOw==",
  "iv": "5aL3VtMJsSRjrYaJ",
  "salt": "jOV7M/sQcJaxIB3xj+uaYw=="
}

crypto:decrypt note body decrypt it.

Note Currenly the preview shows an error like this because {...} is recognized as an MDX expression. I'm going to suppress this in the future.

2:15 Could not parse expression with acorn: Unexpected content after expression

Pomodoro dialog

You can open a pomodoro dialog with pomodoro:open dialog palette command. Start, pause and cancel the timer with the buttons. Succeeded and canceled pomodoros are recorded for a day.

Settings

config.yaml

You can put a configuration file to give some values like secrets to the Memodify application. ~/.config/memodify/config.yaml

vault:
  # Given by APP_PATH_ROOT or VAULT_DIRECTORY.
  # macOS: userData path: "~/Library/Application Support/memodify" by default.
  directory: "~/.memodify/vault"

github:
  # https://github.com/settings/tokens
  token: "ghp_************************************"

openai:
  # https://platform.openai.com/account/api-keys
  api_key: "sk-************************************************"

Supported items

ItemDescription
github.tokenUsed to retrieve issue title in private repositories.
openai.api_keyUsed for ChatGPT feature.
This blog entry is for an experimental feature for ChatGPT.

Advanced

Save and load

Memodify allows you to save your data as a JSON file and load it.

  • file:save
  • file:load

file:save opens a dialog then you can save your all documents as a new file or replace an existing file.

file:load also opens a dialog and you can choose a file to be loaded.

Please note the format of saved JSON files is not stable and no data conversion is supported for now.

CouchDB

You can backup your data into CouchDB and restore it from there.

Go to Settings -> Datbase: CouchDB URL.

Input http://admin:password@localhost:5984/memodify.

$ docker run \
    -e COUCHDB_USER=admin \
    -e COUCHDB_PASSWORD=password \
    -p 5984:5984 \
    -v `pwd`/couchdb:/opt/couchdb/data \
    couchdb:3.3.1
$ npx add-cors-to-couchdb http://admin:password@localhost:5984

Then you can backup your all documnets for memodify.

Open the command palette with Shift + command + P, then select file:backup.

Conflict resolution

Please note memodify doesn't resolve conflicts automatically. You have to resolve them by yourself. In order to do that, you can use CouchDB admin console. It's http://localhost:5984/_utils if your CouchDB is running at your own host.

Feature List

Implemented

v0.0.0-alpha.39

  • Noting
    • Title.
    • Body text by monaco editor.
      • Minimap.
      • Line number.
      • Folding as Markdown at heading and list.
    • Attach images by drag & drop. Save it as a file later.
  • Label
    • Associate multiple labels to a note.
    • Label color.
    • Label editor
      • filter with name.
      • Display labels in list or tile.
  • Role
    • Apply a role.
    • Role color.
    • Role editor.
      • Description in markdown.
  • Filter notes
    • By label.
    • By role (include, exclude).
    • By title (regular expression).
    • By status
      • star, like, completed, trashed.
  • List notes
    • List item: full, normal and simple.
    • Sort by creation or update time.
    • Sort order by asc or desc.
  • Text Search.
  • Editor
    • Save folding state.
    • Surround with <detail> by F1 menu.
    • Show title of the URL on hover. app-only
    • Emoji suggestion when typing :.
    • Jump to another notes by clicking internal links.
    • monaco-editor v0.39.
  • Preivew
    • Rendering MDX.
    • GitHub Flavored Markdown.
    • Syntax Highlighting.
    • Auto replacement of URL.
      • experimental: replacement for GitHub private repository issues. (need your GitHub token)
      • Display status of GitHub issues and pull requests.
    • Math expression with KaTeX.
    • Show web site <title> instead of raw URL if possible.
    • Internal link with URL starts with memodify://.
    • Chart.js.
    • Mermaid.
    • Mini preview.
    • Auto details insertion for long code blocks.
    • Progress bar for task list.
    • Position mode, sid-eby-side or overwrap.
  • Outline view.
  • Export / Import
    • Export all notes including attachments as JSON file.
    • Import memodify file.
  • Undo/Redo
  • Command palette interface.
    • Customize if labels are shown.
  • Note palette interface.
  • Daily note as local file in the vault directory. app-only
    • Open the vault directory.
  • Backup and restore with CouchDB.
  • Zen mode.
  • Full screen mode.
  • Theme.
  • Dark mode.
  • Cryptography.
    • Encrypt note body and decrypt it.
  • Time management with Pomodoro technique.
  • experimental: ChatGPT integration with ad-hoc prompt.
  • Environment variables. app-only
    • APP_PATH_ROOT: root path for the data directory.
  • User tour.

TBD