Chat AI lokal via WiFi dengan file manager
Project description
ChatLol
Multi-provider AI chat app you can run locally and access from any device on your WiFi. One command, zero config — bring your own API keys or use CLI-based providers with no key at all.
Features
- 10 AI providers — Ollama, Claude, OpenAI, Gemini, DeepSeek, OpenRouter, 9Router, Claude CLI, Antigravity (agy), Kiro
- No-key providers — Claude CLI and Antigravity use your local CLI login, no API key needed
- File uploads — Attach text, code, PDF, or images; content is sent to the model as context
- Markdown rendering — Assistant replies render headings, lists, code blocks with copy button, links, and more
- Chat history — Per-user sessions with auto-titles, stored in local SQLite
- File Manager — Browse, upload, create folders, drag & drop — all from the browser
- Settings UI — Manage API keys, port, and Ollama URL from a web page (localhost-only)
- Dark / light mode — Warm Claude-inspired design with one-click theme toggle
- WiFi access — Accessible from phones, tablets, or any device on the same network
- Pip installable —
pip install chatloland run from anywhere
Quick Start
pip install chatlol
chatlol
Open http://localhost:8000 in your browser. That's it.
Custom port:
chatlol 9000
Providers
| Provider | Key Required | Notes |
|---|---|---|
| Ollama | No | Local models (llama3, mistral, etc.) |
| Claude (API) | Yes | ANTHROPIC_API_KEY |
| OpenAI | Yes | OPENAI_API_KEY |
| Gemini | Yes | GEMINI_API_KEY |
| DeepSeek | Yes | DEEPSEEK_API_KEY |
| OpenRouter | Yes | OPENROUTER_API_KEY — access 300+ models |
| 9Router | Optional | Local gateway at localhost:20128 — npm i -g 9router |
| Claude CLI | No | Uses claude CLI login (Claude Code) |
| Antigravity | No | Uses agy CLI login — auto-detects models |
| Kiro | — | Coming soon |
Configuration
Set API keys via:
- Settings page →
http://localhost:8000/settings(localhost only) - Environment variables or
.envfile ~/.chatlol/settings.json(auto-created)
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...
GEMINI_API_KEY=AI...
DEEPSEEK_API_KEY=sk-...
OPENROUTER_API_KEY=sk-or-...
NINEROUTER_API_KEY=...
OLLAMA_URL=http://localhost:11434
PORT=8000
Development
git clone https://github.com/300squarefeet/ChatLol.git
cd ChatLol
pip install -e ".[dev]"
pytest
Run the dev server:
python -m chatlol 8000
Project Structure
chatlol/
├── main.py # FastAPI app, websocket chat, file manager routes
├── config.py # Settings persistence & reload
├── database.py # SQLite chat history
├── file_processor.py # Upload handling (text/PDF/image)
├── providers/ # AI provider implementations
│ ├── ollama.py
│ ├── claude.py
│ ├── openai.py
│ ├── gemini.py
│ ├── deepseek.py
│ ├── openrouter.py
│ ├── ninerouter.py
│ ├── claude_cli.py
│ ├── antigravity.py
│ └── kiro.py
└── static/ # Frontend (vanilla HTML/CSS/JS)
Security
- Settings API is localhost-only (403 from remote)
- API keys are never sent to the browser — only masked placeholders
- CLI providers run in sandbox mode with no tool execution
- File content from uploads is treated as untrusted data
- No shell execution — all subprocesses use
execwith argument lists
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file chatlol-0.1.1.tar.gz.
File metadata
- Download URL: chatlol-0.1.1.tar.gz
- Upload date:
- Size: 50.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd3ad33f7bdffe36203a17eb9ad40d4e61b27fb0361bf3e126978ab0062499c8
|
|
| MD5 |
6d3641dceb8368e1dbd1944ddf462854
|
|
| BLAKE2b-256 |
0de8a0ca884471c1ade12c0e369c5f41eec2f17d8b72bedc6dbb18640f51f39e
|
Provenance
The following attestation bundles were made for chatlol-0.1.1.tar.gz:
Publisher:
publish.yml on 300squarefeet/ChatLol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chatlol-0.1.1.tar.gz -
Subject digest:
dd3ad33f7bdffe36203a17eb9ad40d4e61b27fb0361bf3e126978ab0062499c8 - Sigstore transparency entry: 1913723648
- Sigstore integration time:
-
Permalink:
300squarefeet/ChatLol@612e5a134fb5b932e8e816c2227fe93e8b5ac3d2 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/300squarefeet
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@612e5a134fb5b932e8e816c2227fe93e8b5ac3d2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file chatlol-0.1.1-py3-none-any.whl.
File metadata
- Download URL: chatlol-0.1.1-py3-none-any.whl
- Upload date:
- Size: 63.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20b3327ea0fc8456b45b6172ebefe2855b27730a5c378386c19e70d26ba0421f
|
|
| MD5 |
225bbd1a9e641f624a6d4999490e5230
|
|
| BLAKE2b-256 |
ea9ef74084b9fca88ef82e2cf460a9eea0cfd55f69282f7ac260e6a0e59f6a86
|
Provenance
The following attestation bundles were made for chatlol-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on 300squarefeet/ChatLol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chatlol-0.1.1-py3-none-any.whl -
Subject digest:
20b3327ea0fc8456b45b6172ebefe2855b27730a5c378386c19e70d26ba0421f - Sigstore transparency entry: 1913723877
- Sigstore integration time:
-
Permalink:
300squarefeet/ChatLol@612e5a134fb5b932e8e816c2227fe93e8b5ac3d2 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/300squarefeet
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@612e5a134fb5b932e8e816c2227fe93e8b5ac3d2 -
Trigger Event:
push
-
Statement type: