- Go 50.2%
- TypeScript 39.3%
- HTML 9.7%
- CSS 0.6%
- JavaScript 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| .forgejo/workflows | ||
| .github | ||
| .vscode | ||
| cmd | ||
| packages | ||
| .gitignore | ||
| .hintrc | ||
| .impeccable.md | ||
| .npmrc | ||
| AGENTS.md | ||
| biome.jsonc | ||
| deno.lock | ||
| LICENSE.md | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
Ionian
Content File Management Program.
Local development
Requirements
- Go 1.25 or later
- Node.js and pnpm
1. Build the client
The Go server embeds the built client files, so build and copy them before starting the server.
pnpm install
pnpm --filter client build
rm -rf packages/server_go/internal/assets/dist
cp -R packages/client/dist packages/server_go/internal/assets/dist
2. Create development scan data
The development data generator creates three comic ZIP files with valid PNG pages
and a root-level desc.json. One ZIP is placed in a nested directory to exercise
recursive scanning.
cd packages/server_go
go run ./examples/devdata
By default, the files are written to the OS temporary directory under
ionian-dev-library. Choose another location with:
go run ./examples/devdata -output /absolute/path/to/ionian-dev-library
The generator is safe to run again and prints the absolute SCAN_PATHS value when
it finishes.
The scanner reads .zip files recursively. Each ZIP can contain image pages with
the extensions .jpg, .jpeg, .png, .gif, .bmp, .webp, or .avif.
Optional metadata is read from a root-level desc.json:
{
"title": "Quiet Archive",
"artist": ["Luna"],
"group": ["Ionian Lab"],
"series": ["Development Shelf"],
"type": "manga",
"character": ["Mira"],
"tags": ["archive", "night", "sample"]
}
The leading number in a filename such as 1001 Quiet Archive.zip becomes its GID.
Without desc.json, the filename becomes the title and the comic has no metadata
tags.
3. Configure the server
Create packages/server_go/.env:
DATABASE_DSN=./db.dev.sqlite3
HTTP_ADDR=127.0.0.1:8080
DOMAIN=
JWT_SECRETKEY=local-development-secret-change-me
SCAN_PATHS=/tmp/ionian-dev-library
SECURE=false
Replace SCAN_PATHS with the absolute path printed by the generator. Multiple
scan roots can be separated by spaces.
4. Initialize and start
From packages/server_go:
go run ./cmd/ionian migrate
go run ./cmd/ionian admin-reset
go run ./cmd/ionian server
admin-reset asks you to set the password for the admin account. Open
http://127.0.0.1:8080, sign in as admin, then open Difference and start a
comic scan. The generated items will appear in search after the scan finishes.
For client hot reload, keep the Go server running and start Vite from the repository root:
API_BASE_URL=http://127.0.0.1:8080 pnpm --filter client dev
Then open http://127.0.0.1:5173.
Tests
Run the client checks from the repository root:
pnpm --filter client lint
pnpm --filter client build
Run the Go tests with repository-local caches:
cd packages/server_go
mkdir -p .gocache .gotmp
GOCACHE="$PWD/.gocache" GOTMPDIR="$PWD/.gotmp" go test ./...
Additional server configuration and deployment notes are in
packages/server_go/README.md.
License
MIT License