Skip to content

Commit 9158dad

Browse files
committed
add changelog and update readme
1 parent 1a8570a commit 9158dad

File tree

2 files changed

+88
-17
lines changed

2 files changed

+88
-17
lines changed

CHANGELOG.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on *Keep a Changelog* and the project follows a pragmatic form of semantic versioning.
6+
7+
8+
9+
## [0.1.0] - 2026-01-17
10+
11+
### Added
12+
- Convert FastNotepad exports to Obsidian-ready Markdown (one note per file).
13+
- Parse FastNotepad multi-block export format (`index` preview + `_<id>` full text).
14+
- CLI options:
15+
- `--by-category` to write notes into category subfolders
16+
- `--tag` to add `fastnotepad` + category tag
17+
- `--dry-run` to plan outputs without writing files
18+
- `--no-frontmatter` to write plain Markdown
19+
- `--encoding` to force input encoding
20+
- Filename collision handling with ` (2)`, ` (3)`, ...
21+
- Anonymized example dataset and pytest-based test suite.

README.md

Lines changed: 67 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,59 @@
11
# FastNotepad → Obsidian Migrator
22

3-
Convert Android **FastNotepad** exports into **Obsidian-ready Markdown**.
3+
[![Tests](https://github.com/aplgr/fastnotepad-to-obsidian/actions/workflows/tests.yml/badge.svg)](https://github.com/aplgr/fastnotepad-to-obsidian/actions/workflows/tests.yml)
4+
![Python](https://img.shields.io/badge/python-3.9%2B-blue)
5+
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
6+
[![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](../../pulls)
7+
8+
Convert Android **FastNotepad** exports into **Obsidian-ready Markdown** (one note per file).
49

510
- One note per `.md` file
6-
- Optional category folders
7-
- Optional Obsidian tags
8-
- Optional YAML front matter
9-
- Handles the FastNotepad export quirk where the **preview** lives in the `index` block, while the **full note body** is stored separately as `_<id>` keys.
11+
- Optional category folders (`--by-category`)
12+
- Optional Obsidian tags (`--tag`)
13+
- Optional YAML front matter (default) or plain Markdown (`--no-frontmatter`)
14+
- Handles the FastNotepad export quirk where the **preview** lives in the `index` block, while the **full note body** is stored separately as `_<id>` keys
15+
1016

1117
## Requirements
1218

1319
- Python 3.9+
1420

15-
## Install (optional)
21+
## Install
22+
23+
### Recommended: pipx (isolated CLI install)
24+
25+
Install directly from GitHub:
26+
27+
```bash
28+
pipx install git+https://github.com/aplgr/fastnotepad-to-obsidian.git
29+
```
30+
31+
### Alternative: pip
1632

1733
```bash
1834
pip install .
1935
```
2036

2137
This installs a CLI command: `fastnotepad2obsidian`.
2238

39+
### No install (run from source)
40+
41+
```bash
42+
python3 scripts/fastnotepad2obsidian.py --help
43+
# or
44+
PYTHONPATH=src python3 -m fastnotepad_to_obsidian --help
45+
```
46+
2347
## Quickstart
2448

2549
```bash
2650
fastnotepad2obsidian FastNotepad_2026-01-05 Vault/Inbox --by-category
2751
```
2852

29-
Or without installation:
53+
Dry-run (show what would be created, but write nothing):
3054

3155
```bash
32-
python3 scripts/fastnotepad2obsidian.py FastNotepad_2026-01-05 Vault/Inbox --by-category
33-
# or
34-
PYTHONPATH=src python3 -m fastnotepad_to_obsidian FastNotepad_2026-01-05 Vault/Inbox --by-category
56+
fastnotepad2obsidian FastNotepad_2026-01-05 Vault/Inbox --by-category --dry-run
3557
```
3658

3759
## CLI options
@@ -60,7 +82,7 @@ tags: [fastnotepad, work]
6082
6183
### No front matter
6284
63-
Write plain markdown without YAML front matter:
85+
Write plain Markdown without YAML front matter:
6486
6587
```bash
6688
fastnotepad2obsidian FastNotepad_2026-01-05 Vault/Inbox --no-frontmatter
@@ -90,13 +112,36 @@ Supported values depend on Python, e.g.: `utf-8`, `utf-8-sig`, `utf-16`, `utf-16
90112
- Collisions are resolved with ` (2)`, ` (3)`, ...
91113
- With `--by-category`, notes are written into subfolders by category (slugified). Empty category becomes `Unsorted`.
92114

93-
## Limitations
115+
## Supported export format
116+
117+
This tool supports the FastNotepad export format that looks like:
118+
119+
- `<prefix>#<json_block_1>{[!*|@]}<json_block_2>{[!*|@]}...`
120+
- `json_block_1` contains `index` with `^!` note records (metadata + preview text)
121+
- Later blocks contain the full texts keyed as `_<id>`
122+
123+
If your app uses a different format, open an issue with a **sanitized** snippet.
124+
125+
## Safety & privacy
126+
127+
- This tool runs locally and does **not** make network requests.
128+
- Your export file may contain highly sensitive data (passwords, addresses, etc.).
129+
Please do **not** attach real exports to public issues. If you need help, redact the content first.
94130

95-
- This supports the export format that looks like:
96-
- `<prefix>#<json_block_1>{[!*|@]}<json_block_2>{[!*|@]}...`
97-
- `json_block_1` contains `index` with `^!` note records
98-
- Later blocks contain the full texts keyed as `_<id>`
99-
- If your app uses a different format, open an issue with a **sanitized** snippet.
131+
## Troubleshooting
132+
133+
- **`JSONDecodeError: Extra data`**: Your export has multiple blocks / trailing content. This tool extracts and merges JSON blocks separated by `{[!*|@]}`.
134+
- **Some notes remain short**: Those notes may not have a corresponding `_<id>` full-text entry in the export. The tool will fall back to the preview text from the `index` block.
135+
- **Weird characters**: rerun with `--encoding ...` (e.g. `latin-1`, `utf-16`).
136+
137+
## Contributing
138+
139+
PRs and format samples are welcome.
140+
141+
If you open an issue because your export differs, please include:
142+
- the app name + version
143+
- a **sanitized** export snippet (header + one note record + the `_<id>` mapping)
144+
- the exact command you ran and the output
100145

101146
## Development
102147

@@ -107,6 +152,11 @@ pip install -e .[dev]
107152
pytest
108153
```
109154

155+
## Roadmap (on purpose)
156+
157+
- Improve slugging/filename templates
158+
- More resilient format detection if FastNotepad changes the export structure
159+
110160
## License
111161

112162
MIT

0 commit comments

Comments
 (0)