Skip to content
fiwon123Public

About

Self-hosted file storage you control

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

239 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

eznit logo

eznit

Your project's setup, in one place you host.

Templates, scripts and files you can pull onto any machine — self-hosted, no subscription, no third party.

Release License: MIT Platforms CI (Go) Pre-1.0

✨ What it is

  • One place for the files a project needs. Agent instructions, editor rules, skills, scripts, any text or binary file, in any folder shape you like.
  • Publish once, apply anywhere. A folder becomes a template: the next machine, or the next project, gets eznit template apply <id> instead of a retyped setup.
  • With or without AI. Built-in starters for opencode, Codex, Copilot, Cursor and Windsurf; the same folder holds plain shell and editor configuration.
  • Yours. Bytes live on your disk, indexed in your own PostgreSQL. No subscription and no third-party account.
  • One command to try. make setup && make up needs only Docker.

Pre-1.0 and unhardened. Read Security status before exposing this anywhere but localhost.

🚀 Quick start

make setup && make up     # Docker: API :4000, UI :5173, PostgreSQL, migrations
What Where
Web UI http://localhost:5173
API http://localhost:4000
API reference (Swagger UI) http://localhost:5173/docs

Uploaded bytes live on the api-data volume, so they survive docker compose down (down -v removes them too).

📄 Your first template

The CLI is a separate binary: make build_cli (Go only) writes build/cli/linux/eznit, or download one from Releases.

./build/cli/linux/eznit template init --kind opencode --target ./demo  # no server needed
./build/cli/linux/eznit signup                                        # first account is the admin
./build/cli/linux/eznit template publish ./demo --public
./build/cli/linux/eznit template list                                 # note the id
./build/cli/linux/eznit template apply <id> --target ../another-project
./build/cli/linux/eznit template export <id> -o setup.eznit          # one file…
./build/cli/linux/eznit template apply --from-file setup.eznit        # …on a machine with no server

The core commands prompt for what they need. template init is the offline path: it writes a starter into a folder with no server and no account. Full flags: CLI Reference.

🌐 Web UI

Dark Light
catalogue, dark catalogue, light

Sign up or log in on the page, or paste the token from eznit login into localStorage as eznit.token. The full set of screenshots is under docs/screenshots.

🧩 What you can keep

Keep Commands Travels as
Files upload, list, download, delete, share bytes on your disk, indexed in PostgreSQL
Templates template publish, list, show, apply, export, init a folder: text, binary, variables, commands
Commands command add, list, show, remove, import, export a script kept once and pulled into templates by id; a crower pack imports/exports them
Repositories repo auth, list, clone (GitHub, GitLab, Bitbucket) a clone; the token stays on your machine

A template may hold anything: AGENTS.md, .opencode/agents/, a SKILL.md, .cursor/rules/, a PowerShell profile, a Makefile. Values like {{PROJECT_NAME}} are asked on the machine that writes the files and are never sent to the server.

💻 Terminals, shells and editors

eznit template init --kind writes a starter for the terminal you use:

Kind Starter writes
opencode AGENTS.md + .opencode/agents/{build,plan,reviewer}.md
codex AGENTS.md
copilot AGENTS.md + .github/copilot-instructions.md
cursor AGENTS.md + .cursor/rules/project.mdc
windsurf AGENTS.md + .windsurf/rules/project.md
generic AGENTS.md
bash shell/bashrc.sh
zsh shell/zshrc.sh
fish shell/config.fish
powershell shell/profile.ps1

The shell starters are commented snippets: source the file from your shell's rc/profile and uncomment the examples you want. Applying a template never edits a file in your home directory unless you point --target there.

📦 Download

Platform CLI Server bundle
🐧 Linux amd64 eznit-cli_<tag>_linux_amd64.tar.gz eznit-server_<tag>_linux_amd64.tar.gz
🐧 Linux arm64 eznit-cli_<tag>_linux_arm64.tar.gz eznit-server_<tag>_linux_arm64.tar.gz
🪟 Windows amd64 eznit-cli_<tag>_windows_amd64.zip eznit-server_<tag>_windows_amd64.zip
🪟 Windows arm64 eznit-cli_<tag>_windows_arm64.zip eznit-server_<tag>_windows_arm64.zip
🍎 macOS amd64 eznit-cli_<tag>_darwin_amd64.tar.gz eznit-server_<tag>_darwin_amd64.tar.gz
🍎 macOS arm64 eznit-cli_<tag>_darwin_arm64.tar.gz eznit-server_<tag>_darwin_arm64.tar.gz

The CLI archive carries eznit and ez; the server bundle carries eznit-server, eznit-gui, the migrations, the Compose services and RUNNING.md. Verify a download against checksums.txt from the release page.

🔒 Security status

This is a self-hosted tool, and it is not hardened. What is true today:

  1. Files are stored unencrypted on the server's disk. Do not put this on a public interface as it stands — localhost or a VPN you control.
  2. The first account is the admin. It is the only one that may list, update or delete other accounts; no route grants the flag.
  3. Auth is rate-limited per IP and per address (429 + Retry-After). Signup and login do not reveal whether an address has an account; passwords are bcrypt; session tokens are random and expire.
  4. Tokens stay on the CLI machine. The session token and the git-host token live in ~/.eznit/config.json (mode 0600); the eznit API never sees the host token.

The full list of what is deferred is on the roadmap board.

📚 Documentation

I want to… Read
try it in five minutes Getting Started
publish and apply a template Templates and skills
look up a command or flag CLI Reference
configure every variable and secret Configuration
know what runs on which OS or shell Platforms and shells
see what is planned Direction
develop or build a release Development · Releases
fix an error Troubleshooting

In the repository: ARCHITECTURE.md is the map of the request path and where a change belongs; CONTRIBUTING.md is how to send one. The wiki's source is docs/wiki/ — edit it through a pull request, or the next sync overwrites it.

⚠️ What is not proven

This project says what it verified.

  • No test sends a request through the whole stack. The router is tested with no database, and the repositories are tested against a real PostgreSQL; no test starts the API and makes an HTTP call that reaches a query.
  • The Windows server bundle is built, never started. CI smoke-tests the Windows CLI; the server and the Compose stack are not run on Windows.
  • The ARM64 binaries are built, never executed on ARM hardware, and the macOS archives are cross-compiled on Linux and never started on a Mac.
  • The browser UI has no automated test; the screenshots are captured by hand.

Running the untested parts and saying what happened is the most useful contribution right now — see CONTRIBUTING.md.

🤝 Contributing

Issues and pull requests are welcome: open an issue first, branch from dev, run make check (and make web_check for UI changes), and say in the pull request what ran and what did not. The full rules are in CONTRIBUTING.md.

This project is developed with an AI agent. The review bar is the same: judge by tests and evidence, not by who wrote it.

📄 License

MIT — see LICENSE.

About

Self-hosted file storage you control

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages