Enter one or more Slimefun items and amounts. SFSTLR walks the full recipe tree, flattens it into a topologically sorted step list, and tells you exactly what raw materials to gather and in what order to craft them - no wiki-diving required.
- Minecraft-style 3×3 crafting grids with SF and vanilla textures
- 3D isometric block rendering for block-type ingredients
- Collapsible step cards - follow along one step at a time
- URL sharing - encode your item list in the URL and send it to a friend
- Search autocomplete across all 12,000+ Slimefun items
- Next.js 14 (App Router), React 18, TypeScript
- Tailwind CSS
- Vitest (unit tests + coverage)
- Node.js recipe resolver (
src/, run standalone as a CLI)
- Node.js 18+
- npm
Clone and run the web app:
git clone https://github.com/StoryTime-Productions/sfstlr.git
cd sfstlr/web
npm install
npm run dev
Open http://localhost:3000.
Run the CLI directly (resolves to stdout):
cd sfstlr
npm install
node sfstlr.js <ITEM_ID> [amount]
The CLI caches items.json from SFCalc-Online in ~/.sfstlr/. Pass --refresh to force a re-download.
Extract textures (requires a Minecraft + Slimefun resource pack):
cd sfstlr/web
npm run extract-textures
Root (sfstlr/):
| Command | Description |
|---|---|
npm start |
Run the CLI resolver (node sfstlr.js) |
npm run lint |
ESLint over src and sfstlr.js |
npm run format |
Prettier write |
npm run format:check |
Prettier check |
Web app (sfstlr/web):
| Command | Description |
|---|---|
npm run dev |
Start the Next.js dev server |
npm run build |
Production build |
npm start |
Serve the production build |
npm run lint |
Next.js lint |
npm run typecheck |
tsc --noEmit |
npm test |
Run Vitest suite |
npm run test:coverage |
Run Vitest suite with coverage |
npm run extract-textures |
Extract SF/vanilla textures from a resource pack |
Pre-commit hooks run automatically via Husky.
Checks on commit attempt:
- Format (Prettier)
- Type check (TypeScript)
- Commit message convention (Conventional Commits)
Enable once per clone:
npm install
Conventional commit examples:
feat(web): add collapsible step cardsfix(resolver): correct topological sort directionchore: update dependencies
PRs to main require all checks in .github/workflows/ci.yml to pass:
- Lint (ESLint, root + web)
- Type Check (tsc, web)
- Format (Prettier, root)
- Conventional Commits (commitlint)
- Test & Coverage (Vitest, web)
Pushes to main trigger the same suite plus a Vercel production deployment.
See .github/pull_request_template.md and the issue templates in .github/ISSUE_TEMPLATE. Commits must follow Angular-style conventional commit format, enforced both in CI and locally via Husky: pre-commit runs lint-staged (ESLint + Prettier on staged JS/TS, Prettier on JSON/MD/CSS) plus a TypeScript typecheck in web/, and commit-msg runs commitlint. Run npm install once to set up the hooks (via the prepare script).
MIT - see LICENSE.
