Zeeker 0.6.0 introduces a workspace architecture that separates the core framework from shared utilities and example projects. While the architecture has changed significantly for development, the user-facing CLI remains backward compatible.
If you only use the CLI, update your existing projects with these simple changes:
# In your project's pyproject.toml
dependencies = [
"zeeker>=0.6.0",
]Then run:
cd your-project
uv syncThat's it! Your workflow remains exactly the same.
Old (pyproject.toml):
dependencies = ["zeeker"]New (pyproject.toml):
dependencies = [
"zeeker>=0.6.0",
]
# Optional: Add zeeker-common for utilities
# dependencies = [
# "zeeker>=0.6.0",
# "zeeker-common>=0.1.0",
# ]If you were copy-pasting helper functions from examples, you can now use zeeker-common:
Before (copying code):
# You had to copy-paste these functions into your resources
import hashlib
def get_hash_id(elements):
return hashlib.md5("|".join(str(e) for e in elements).encode()).hexdigest()After (using zeeker-common):
# Install the utilities package
uv add zeeker-common# Import from zeeker-common
from zeeker_common import get_hash_id, get_jina_reader_content, async_retryAvailable utilities in zeeker-common:
get_hash_id(elements)- Generate deterministic hash IDsget_jina_reader_content(url)- Extract web content with Jina Readerasync_retry- Retry decorator for async functionsget_summary(text)- OpenAI summarization (requireszeeker-common[openai])
Nothing changes! Your .env file and environment variables work exactly the same:
# S3 deployment
S3_BUCKET=your-bucket
AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
# API keys
JINA_API_TOKEN=your-token
OPENAI_API_KEY=your-key✅ All CLI commands work identically:
zeeker init- Create projectszeeker add- Add resourceszeeker build- Build databaseszeeker deploy- Deploy to S3zeeker assets- Manage UI assetszeeker metadata- Generate metadata
✅ Resource files (resources/*.py) work the same
✅ Project structure remains unchanged
✅ Generated projects have the same structure
✅ Deployment workflows are identical
If you imported zeeker as a Python library:
Most imports still work with backward compatibility:
# These still work
from zeeker import ZeekerProjectManager
from zeeker import ZeekerDeployer, ZeekerValidatorRecommended new imports:
# More explicit (optional, but recommended)
from zeeker.core import ZeekerProjectManager
from zeeker.core import ZeekerDeployer, ZeekerValidatorIf you were using utility functions that have moved to zeeker-common, you'll see deprecation warnings:
# This will work but show a deprecation warning
from zeeker import get_hash_id # Deprecated
# Do this instead
pip install zeeker-common
from zeeker_common import get_hash_idBefore (0.5.x):
zeeker/
├── zeeker/ # Package code
├── tests/ # Tests
└── pyproject.toml # Single packageAfter (0.6.0):
zeeker/
├── packages/
│ ├── zeeker/ # Core package
│ └── zeeker-common/ # Utilities
├── examples/ # Example projects
└── pyproject.toml # Workspace configOld workflow:
git clone https://github.com/zeeker-sg/cli.git
cd zeeker
uv sync
uv run pytestNew workflow (exactly the same!):
git clone https://github.com/zeeker-sg/cli.git
cd zeeker
uv sync
uv run pytestThe commands are identical! The workspace is transparent to developers.
Tests are now organized by package:
# Run all tests
uv run pytest
# Run specific package tests
uv run pytest packages/zeeker/tests
uv run pytest packages/zeeker-common/tests
# Run with markers (unchanged)
uv run pytest -m unit
uv run pytest -m integrationThe CLI is fully backward compatible. Existing projects work without modification (except updating the dependency version).
-
Utility functions moved: If you imported utility functions directly from
zeeker, installzeeker-commonand import from there instead. -
Import paths: Some internal import paths changed, but public API remains stable. If you were importing from
zeeker.core.*directly, those paths are unchanged.
A new package with reusable utilities for data projects:
pip install zeeker-commonIncludes:
- Hash ID generation
- Jina Reader integration
- Retry decorators
- OpenAI integration (optional)
Two reference implementations in the repository:
examples/legal-news/- Advanced example with async fetching and zeeker-commonexamples/datasets/- Simple example with static data
Generated projects now include:
- Updated dependency specifications (
zeeker>=0.6.0) - Comments showing zeeker-common usage
- Better examples and documentation
For contributors, the workspace architecture enables:
- Unified dependency management
- Parallel development on packages
- Shared example projects
- Better code organization
Solution: Install zeeker-common
uv add zeeker-commonfrom zeeker_common import get_hash_idSolution: Make sure you're in the repository root and run:
uv sync
uv run pytestSolution: Update your project dependencies:
cd your-project
uv sync- Documentation: See README.md for workspace overview
- Examples: Check
examples/directory for reference implementations - Issues: Report issues at https://github.com/zeeker-sg/cli/issues
For most users: Update pyproject.toml dependency to zeeker>=0.6.0 and run uv sync. Everything else works the same.
For advanced users: Consider using zeeker-common for shared utilities instead of copy-pasting code.
For contributors: The workspace is transparent - development workflow is unchanged.