Skip to content

NakliTechie/nakli-dev

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nakliOS

A private, browser-native desktop for single-file tools. Apps stay standalone; nakliOS gives them a home — a spotlight (⌘K), themed wallpapers, folders, a dock, sticky notes, and an Immersive mode where cooperative apps feel native inside the OS instead of foreign in iframes.

Try it: naklios.dev

40-odd privacy-first tools, games, and utilities — each a single HTML file that runs entirely in your tab. The NakliTechie collection is the first apps nakliOS hosts. No build step, no backend, no telemetry.

Modes

  • Basic — built-in classics (Minesweeper, Solitaire, Calculator, Notepad, Spider) open as inline windows; everything else opens a new tab. Default.
  • Immersive (experimental) — light apps open as iframe windows inside the desktop.

Adding a new app

One line in the APPS array at the top of index.html:

{ id:'mynewapp', name:'MyNewApp', url:'https://mynewapp.naklitechie.com',
  glyph:'✨', bg:'brand',
  description:'One-sentence pitch.',
  tags:['tool','ai'] }

Optional fields: maxMode:'basic', iframeable:false, private:true, kind:'classic', desktopAlign:'right' + desktopOrder:N, svg:'<path d=…>', embedUrl:'https://naklios.dev/apps/<id>/' (same-origin mirror for FSA-needing apps; see apps/manifest.json).

Mirroring an app for same-origin embedding

Cross-origin iframes can't invoke showDirectoryPicker(). To embed a File-System-Access-using app inside Immersive mode, mirror it under apps/<id>/ so it loads from naklios.dev itself.

One-time per app

  1. Add an entry to apps/manifest.json pointing at the upstream repo/branch/file.

  2. Set embedUrl: 'https://naklios.dev/apps/<id>/' on the app's APPS entry in index.html.

  3. In the upstream source repo, add a small dispatcher workflow at .github/workflows/notify-naklios.yml:

    name: Notify nakliOS to re-mirror
    on:
      push:
        branches: [main]
        paths: ['index.html']
    jobs:
      trigger:
        runs-on: ubuntu-latest
        steps:
          - run: gh workflow run sync-mirrors.yml --repo NakliTechie/nakli-dev --ref main
            env:
              GH_TOKEN: ${{ secrets.NAKLIOS_DISPATCH_TOKEN }}
  4. In that same source repo, add the secret NAKLIOS_DISPATCH_TOKEN (Settings → Secrets and variables → Actions). It's a fine-grained PAT with Actions: Read and write on NakliTechie/nakli-dev. The same PAT can be reused across every source repo.

  5. Run bash scripts/sync-mirrors.sh locally once to seed the initial mirror, then commit.

How updates flow

When a source repo pushes to main with a change to index.html, its dispatcher fires gh workflow run against nakli-dev. The Sync app mirrors workflow pulls every mirrored app's latest index.html, opens a PR if anything drifted. You review + merge → Cloudflare redeploys naklios.dev with the fresh mirror.

The Immersive iframe drops its sandbox and uses the mirror; standalone visits and new-tab opens continue to use the canonical url.

Manual trigger anytime: Actions tab → Sync app mirrorsRun workflow.

Storage backends — Folder + Crate

Cooperative apps that want persistent state use the naklios.fs.* SDK surface. The host fulfils those calls with one of two backends, configured in Settings:

  • Folder (local) — a directory you pick via File System Access. Lives on disk. Multi-device only via iCloud Drive / Dropbox / Google Drive of your choice.
  • Crate (cloud, encrypted) — BYOK end-to-end-encrypted folder on Cloudflare R2 (or any S3-compatible bucket). Multi-device sync is built in. Set up your bucket + download the .crate-creds file from crate.naklios.dev, then connect it here.

Both can be connected at the same time. On first use, each app is asked which backend to store its data in — choice is remembered per-app and switchable later. Apps see the same apps/<id>/ layout regardless of backend, so the same source code works against either.

The Crate ESM modules are vendored under vendor/crate/ and loaded dynamically the first time the user clicks Connect Crate — zero cost for users who don't opt in.

License

MIT. See LICENSE.


Part of the NakliTechie series — single-file, browser-native, no-backend tools.

About

A desktop-themed launcher for the NakliTechie collection. Single HTML file, no server, no tracking. All these tools, none of your data.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors