Multi-agent collaborative editing and deployment of Markpact projects via CRDT delta sync
Project description
marksync: GitOps meets AI Agents -> all in one README
AI Cost Tracking
- ๐ค LLM usage: $2.3481 (29 commits)
- ๐ค Human dev: ~$990 (9.9h @ $100/h, 30min dedup)
Generated on 2026-06-18 using openrouter/qwen/qwen3-coder-next
Multi-agent collaborative editing and deployment of Markpact projects via CRDT delta sync.
pip install marksync[all]
Version: 0.2.23
Przykลad
Wyobraลบ sobie, ลผe piszesz jedno zdanie ("zbuduj mi API do zamรณwieล z ludzkim zatwierdzaniem pลatnoลci"), a system generuje z tego jeden plik Markdown, w ktรณrym jest wszystko: konfiguracja pipeline'u, kod aplikacji, komendy uruchomienia, konfiguracja deploymentu, aktualny stan procesu i historia zdarzeล. Potem ten sam plik jest czytany przez silnik, ktรณry krok po kroku wykonuje pipeline โ czฤลฤ robiฤ skrypty, czฤลฤ AI, a przy krytycznych decyzjach czeka na czลowieka. Na koลcu wzorzec sukcesu jest zapisywany, ลผeby nastฤpnym razem byลo szybciej. Kluczowa idea: jeden plik = kontrakt + kod + stan + logi + deployment.
python demos/demo_live_marksync.py --prompt "Build a todo API"
source venv/bin/activate && python -m marksync.cli create "Build a chat API with WebSocket"
pipeline:
name: order-api
steps:
- name: parse_order
actor: script
- name: check_inventory
actor: llm
- name: fraud_detection
actor: script
- name: human_payment_approval
actor: human
config: {channel: web, timeout: 7200}
- name: process_payment
actor: script
- name: deploy_update
actor: llm
Jaki system z rynku to przypomina?
MarkSync jest hybrydฤ kilku koncepcji, ale najbliลผej mu do tych systemรณw:
Najbliลผszy odpowiednik: Dagger.io + CrewAI + Jupyter Notebooks
- Dagger.io โ pipeline-as-code w jednym pliku, determinizm, powtarzalnoลฤ, ale Dagger nie ma AI ani human-in-the-loop
- CrewAI / AutoGen โ multi-agent orchestration z rรณลผnymi rolami, ale te systemy nie majฤ CRDT ani kontraktowego podejลcia do jednego pliku
- Pulumi / Terraform โ Infrastructure as Code z deklaratywnym stanem, ale bez agentรณw AI i bez self-learningu
- n8n / Temporal.io โ workflow orchestration z human tasks i retry policies, ale bez Markdown-as-contract
- Jupyter Notebooks โ plik, ktรณry jest jednoczeลnie kodem, dokumentacjฤ i wynikiem wykonania โ filozoficznie najbliลผej konceptu "README jako ลผywy dokument"
What it does
Multiple AI agents work simultaneously on a single Markpact README.md โ editing code, reviewing quality, deploying changes โ all synchronized in real-time through delta patches (only changed code blocks are transmitted, not the entire file).
A built-in DSL (Domain-Specific Language) lets you orchestrate agents, define pipelines, and control the entire architecture from an interactive shell or via REST/WebSocket API. A Pipeline Engine supports human-in-the-loop approval steps alongside LLM and script actors. A Plugin System enables export/import to BPMN, n8n, Airflow, Kubernetes, GitHub Actions, and more.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ marksync Runtime โ
โ โ
โ .env โโโโโโโโโโบ settings.py โโโ hardware_detect.py โ
โ โ โ
โ agents.yml โโโบ Orchestrator โโโฌโโโบ editor ยท reviewer โ
โ (define once) (1 process) โโโโบ deployer ยท monitor โ
โ โโโโบ ConversationAgent โ
โ โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโ โ
โ โ DSL Shell โโโโโบโ DSL Executor โ โ โ
โ โ REST API โโโโโบโ agents ยท pipelines ยท routes โ โ
โ โ WS API โโโโโบโ macros ยท webhooks ยท state โ โ
โ โ Dashboard โโโโโบโ โ โ
โ โ Sandbox UI โโโโโบโ โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโ โ
โ โ PipelineEngineโโโโบโ SyncServer (WS:8765) โ โ
โ โ LLMยทScriptยท โ โ CRDT doc ยท delta patches ยท persistโ โ
โ โ Human steps โ โโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโ โผ โ
โ README.md (disk) โ
โ โ
โ Plugin System: BPMN ยท n8n ยท Airflow ยท K8s ยท GitHub ยท Ansible โ
โ Channels: SSE ยท WebSocket ยท MQTT ยท Redis ยท AMQP ยท NATS ยท Slack โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Prerequisites
Ollama running locally (recommended) or a cloud LLM provider:
# Install ollama: https://ollama.ai
ollama pull qwen2.5-coder:7b
ollama serve # keep running
Run marksync init to auto-detect your GPU/RAM and configure the best model.
Quick Start โ First Run Wizard
pip install marksync[all]
marksync init
The init wizard:
- Detects GPU (NVIDIA/AMD) and RAM via
hardware_detect - Suggests a model based on available VRAM
- Lets you choose: Ollama, OpenRouter, OpenAI, Anthropic, or custom LiteLLM
- Tests the connection and saves config to
.env
Quick Start โ Docker Compose
git clone https://github.com/wronai/marksync.git
cd marksync
docker compose up --build
This starts 4 services (not 1-per-agent โ all agents run in a single orchestrator):
| Container | Role | What it does |
|---|---|---|
sync-server |
Hub | WebSocket server, persists README.md, broadcasts changes |
orchestrator |
Agents | Reads agents.yml, spawns all agents in 1 process |
api-server |
API | REST/WS API for remote DSL control |
init-project |
Seed | Copies examples/1/README.md into shared volume |
Agent definitions live in agents.yml โ define once, use everywhere:
# agents.yml
agents:
editor-1: { role: editor, auto_edit: true }
reviewer-1: { role: reviewer }
deployer-1: { role: deployer }
monitor-1: { role: monitor }
pipelines:
review-flow: { stages: [editor-1, reviewer-1] }
Then push changes from your host:
pip install -e .
marksync push README.md
marksync blocks examples/1/README.md
Quick Start โ Without Docker
pip install -e .
# Terminal 1: Start sync server
marksync server examples/1/README.md
# Terminal 2: Start all agents from agents.yml
marksync orchestrate -c agents.yml
# Terminal 3: Web sandbox (edit & test in browser)
marksync sandbox
# Open http://localhost:8888
Or start agents individually:
marksync agent --role editor --name editor-1
DSL โ Agent Orchestration
The marksync DSL lets you control agents, pipelines, and architecture from a shell or API.
Interactive Shell
marksync shell
marksync> AGENT coder editor --model qwen2.5-coder:7b --auto-edit
marksync> AGENT reviewer-1 reviewer
marksync> AGENT watcher monitor
marksync> PIPE review-flow coder -> reviewer-1 -> deployer-1
marksync> ROUTE markpact:run -> deployer-1
marksync> LIST agents
marksync> STATUS
Orchestrate from agents.yml
# Dry-run โ preview the plan
marksync orchestrate --dry-run
# Run all agents
marksync orchestrate -c agents.yml
# Run only editors
marksync orchestrate --role editor
REST / WebSocket API
# Start the API server
marksync api --port 8080
# Execute DSL commands via REST
curl -X POST http://localhost:8080/api/v1/execute \
-H "Content-Type: application/json" \
-d '{"command": "AGENT coder editor --auto-edit"}'
# List agents
curl http://localhost:8080/api/v1/agents
# WebSocket: ws://localhost:8080/ws/dsl
# Swagger docs: http://localhost:8080/docs
See docs/dsl-reference.md and docs/api.md for full reference.
CLI Reference
marksync init # First-run wizard (LLM provider + model setup)
marksync server README.md [--host H] [--port P] [--ssl-cert F] [--ssl-key F] [--git-auto-commit] [--rate-limit N]
marksync agent --role ROLE --name NAME [--model M] [--auto-edit] [--server-uri ws://...]
marksync orchestrate [-c agents.yml] [--role ROLE] [--dry-run] [--export-dsl FILE]
marksync push README.md [--server-uri ws://...] [--name NAME]
marksync blocks README.md
marksync shell [--server-uri ws://...] [--ollama-url URL] [--script FILE]
marksync api [--host H] [--port P] [--server-uri ws://...] [--ollama-url URL]
marksync sandbox [--host H] [--port P]
marksync generate PROMPT [--output DIR] [--model M] [--dry-run] [--build] [--up]
marksync create PROMPT [--output DIR] [--no-llm] [--deploy] [--open-dashboard] [--env KEY=VAL]
marksync dashboard [--contract README.md] [--port P] [--host H] [--sync-server ws://...]
marksync snapshot CONTRACT [--label TEXT]
marksync rollback CONTRACT [--snapshot ID] [--list]
All commands read defaults from .env โ no need to pass --server-uri, --ollama-url etc.
Agent Roles
Editor (--role editor)
Receives block updates, sends code to Ollama for improvement (error handling, type hints, docstrings). Use --auto-edit to automatically push improvements back to server.
Reviewer (--role reviewer)
Analyzes every changed block for bugs, security issues, and best practices. Results are logged โ does not modify code.
Deployer (--role deployer)
Watches for changes to markpact:run and markpact:deps blocks. Triggers markpact README.md --run to rebuild and redeploy the application.
Monitor (--role monitor)
Logs every block change with block ID, content size, and SHA-256 hash. Useful for audit trails and debugging.
ConversationAgent (--role conversation)
Processes markpact:conversation blocks through an LLM conversation engine, maintaining full history in CRDT.
PactownMonitor (--role pactown-monitor)
Polls Pactown service health, writes markpact:state and markpact:log blocks, and triggers the pactown-autofix pipeline on degraded health.
Pipeline Engine
The pipeline engine supports 3 actor types in any combination:
| Actor | Execution | Use cases |
|---|---|---|
| LLM | Async, automatic | Code editing, doc writing, root-cause analysis |
| SCRIPT | Sync, deterministic | Lint, validate, format, deploy, fraud-check |
| HUMAN | Blocks until API resolve | Code review, payment authorization, content moderation |
from marksync.pipeline.engine import PipelineEngine, Step
engine = PipelineEngine()
engine.define("code-review", [
Step(name="edit", actor="llm", prompt="Improve this code"),
Step(name="review", actor="human", description="Approve changes"),
Step(name="lint", actor="script", script="lint"),
Step(name="deploy", actor="script", script="deploy"),
])
run_id = await engine.start("code-review", input_data={"code": "..."})
Built-in demo pipelines: code-review, account-creation, payment, doc-generation, incident-response, content-moderation, data-migration.
Retry/timeout per step, idempotency keys, CRDT-persisted run history, and event hooks are all supported.
Plugin System
Process Formats
Export/import pipelines to standard process formats:
| Format | ID | Description |
|---|---|---|
| BPMN 2.0 | bpmn |
Full collaboration with pools/lanes, multi-agent |
| XPDL | xpdl |
XML Process Definition Language |
| Petri Net | petri |
Petri Net XML |
| DMN | dmn |
Decision Model and Notation |
| CMMN | cmmn |
Case Management Model and Notation |
| EPC | epc |
Event-driven Process Chain |
| UML Activity | uml-activity |
UML Activity Diagram |
| BPEL | bpel |
Business Process Execution Language |
Integrations
| System | ID | Output |
|---|---|---|
| Kubernetes | kubernetes |
K8s Job YAML |
| GitLab CI | gitlab |
.gitlab-ci.yml |
| GitHub Actions | github |
Workflow YAML |
| Apache Airflow | airflow |
Python DAG |
| Ansible | ansible |
Playbook YAML |
| n8n | n8n |
Workflow JSON |
| Terraform | terraform |
HCL |
| Pactown | pactown |
pactown.yaml |
API Adapters
| Schema | ID | Output |
|---|---|---|
| OpenAPI 3.0 | openapi |
YAML spec |
| AsyncAPI | asyncapi |
YAML spec |
| GraphQL | graphql |
.graphql schema |
| gRPC | grpc |
.proto file |
| JSON Schema | jsonschema |
JSON |
Channels
| Channel | Protocol | Use case |
|---|---|---|
sse |
HTTP SSE | Browser push notifications |
websocket |
WS | Bidirectional real-time |
mqtt |
MQTT | IoT / edge agents |
redis |
Redis Pub/Sub | High-throughput events |
amqp |
AMQP/RabbitMQ | Reliable message queuing |
nats |
NATS | Cloud-native messaging |
grpc |
gRPC streaming | High-performance binary |
slack |
Slack API | Human notifications |
http-webhook |
HTTP POST | External integrations |
cli-stdio |
stdin/stdout | Local scripting |
Python API
from marksync import SyncServer, SyncClient, AgentWorker
from marksync.agents import AgentConfig
# Start server programmatically
server = SyncServer(readme="README.md", port=8765)
await server.run()
# Push changes
client = SyncClient(readme="README.md", uri="ws://localhost:8765")
patches, saved = await client.push_changes()
# Start an agent
config = AgentConfig(
name="my-agent", role="reviewer",
server_uri="ws://localhost:8765",
ollama_url="http://localhost:11434",
ollama_model="qwen2.5-coder:7b",
)
agent = AgentWorker(config)
await agent.run()
# DSL โ programmatic orchestration
from marksync.dsl import DSLExecutor
executor = DSLExecutor(server_uri="ws://localhost:8765")
await executor.execute("AGENT coder editor --auto-edit")
await executor.execute("PIPE review coder -> reviewer")
await executor.execute("MACRO deploy-all = PIPE $1 editor-1 -> reviewer-1 -> deployer-1")
print(executor.snapshot())
# Pipeline engine โ human-in-the-loop
from marksync.pipeline.engine import PipelineEngine, Step
engine = PipelineEngine()
engine.define("review", [
Step(name="edit", actor="llm", prompt="Improve this code"),
Step(name="review", actor="human", description="Approve changes"),
Step(name="deploy", actor="script", script="deploy"),
])
run_id = await engine.start("review", input_data={"code": "..."})
# Contract generation from natural language
from marksync.intent.parser import IntentParser
from marksync.contract.generator import ContractGenerator
from marksync.sync.crdt import CRDTDocument
crdt = CRDTDocument()
intent = IntentParser(crdt_doc=crdt).parse("REST API for task management")
contract = ContractGenerator(crdt_doc=crdt).generate(intent)
# Pattern learning
from marksync.learning.patterns import PatternLibrary
library = PatternLibrary()
library.save_from_contract("./my-service", intent, success=True)
# Plugin export
from marksync.plugins.registry import PluginRegistry
registry = PluginRegistry()
registry.discover()
result = registry.export("bpmn", pipeline)
result = registry.export("github", pipeline)
Sync Protocol
Communication uses JSON messages over WebSocket:
| Direction | Type | Description |
|---|---|---|
| SโC | manifest |
{block_id: sha256} map on connect |
| CโS | patch |
diff-match-patch delta for one block |
| CโS | full |
Full block content (fallback) |
| SโC | ack |
Confirmation with sequence number |
| SโC | nack |
Patch failed, hash mismatch |
| SโC | patch/full |
Broadcast to other clients |
| CโS | get_snapshot |
Request full README markdown |
| SโC | snapshot |
Full README content |
Delta strategy: if patch < 80% of full content โ send patch. Otherwise send full block. SHA-256 hash verification on every apply.
Project Structure
marksync/
โโโ .env # Centralized config (ports, hosts, model, LLM provider)
โโโ agents.yml # Agent definitions (single source of truth)
โโโ pyproject.toml # Package config (pip install .)
โโโ Dockerfile # Single image for server + agents
โโโ docker-compose.yml # 4 services (server, orchestrator, api, init)
โโโ docs/
โ โโโ architecture.md # System design & data flow
โ โโโ dsl-reference.md # DSL command reference
โ โโโ api.md # REST & WebSocket API docs
โ โโโ pipelines.md # Pipeline engine guide
โ โโโ plugins.md # Plugin system reference
โ โโโ channels.md # Channel transports reference
โ โโโ formats.md # Process format export/import
โ โโโ integrations.md # External system integrations
โ โโโ api-adapters.md # API schema generation
โ โโโ comparison.md # vs Airflow, Camunda, n8n, Temporal
โโโ examples/
โ โโโ 1/ # Task Manager API
โ โโโ 2/ # Chat WebSocket App
โ โโโ 3/ # Data Pipeline CLI
โ โโโ bpmn_multiagent.py # BPMN multi-agent export scenarios
โ โโโ channels/ # Channel E2E tests (MQTT, Redis, AMQP, NATS, SSE)
โโโ marksync/
โ โโโ __init__.py # Package exports (lazy imports)
โ โโโ cli.py # Click CLI (init, server, agent, orchestrate, generate,
โ โ # create, dashboard, snapshot, rollback, sandbox, ...)
โ โโโ settings.py # Centralized config from .env (Settings, load_settings)
โ โโโ hardware_detect.py # GPU/RAM detection, Ollama check, model suggestion
โ โโโ orchestrator.py # Reads agents.yml, spawns agents (Orchestrator, OrchestrationPlan)
โ โโโ dsl/
โ โ โโโ parser.py # DSLParser, DSLCommand, brace expansion
โ โ โโโ executor.py # DSLExecutor (agents, pipelines, routes, macros, webhooks, state)
โ โ โโโ shell.py # Interactive REPL (DSLShell, readline completion)
โ โ โโโ api.py # FastAPI REST + WebSocket endpoints
โ โโโ sync/
โ โ โโโ __init__.py # BlockParser, MarkpactBlock
โ โ โโโ crdt.py # CRDTDocument (pycrdt/Yjs, snapshot, rollback, GC)
โ โ โโโ engine.py # SyncServer, SyncClient, MultiProjectServer
โ โ โโโ snapshots.py # SnapshotStore (save, list, load, restore, prune)
โ โโโ pipeline/
โ โ โโโ engine.py # PipelineEngine (LLM/SCRIPT/HUMAN steps, retry, events)
โ โ โโโ api.py # Pipeline REST API (tasks, resolve, demo pipelines)
โ โ โโโ llm_client.py # LLMClient (LiteLLM), LLMConfig, LLMResponse
โ โ โโโ prompt_generator.py # PromptGenerator, PromptSpec, GeneratedService
โ โโโ contract/
โ โ โโโ block_types.py # Block type constants, EnvProfile, GeneratedContract
โ โ โโโ generator.py # ContractGenerator (intent โ 10 contract blocks)
โ โ โโโ templates.py # RestAPITemplate, WebAppTemplate, CLITemplate, WorkerTemplate
โ โโโ intent/
โ โ โโโ parser.py # IntentParser, ProcessIntent (heuristic + LLM)
โ โ โโโ yaml_generator.py # YAMLGenerator (intent โ pipeline + orchestration YAML)
โ โโโ conversation/
โ โ โโโ engine.py # ConversationEngine (history, CRDT persistence, LLM)
โ โโโ learning/
โ โ โโโ feedback.py # FeedbackCollector (approve, reject, complete_run)
โ โ โโโ patterns.py # Pattern, PatternLibrary (save, find, score)
โ โ โโโ prompt_refiner.py # PromptRefiner (analyze history, refine prompts)
โ โโโ auth/
โ โ โโโ tokens.py # create_token, verify_token (JWT or HMAC fallback)
โ โ โโโ roles.py # Role enum, has_permission
โ โ โโโ middleware.py # AuthMiddleware, get_current_user, require_role
โ โโโ dashboard/
โ โ โโโ app.py # Dashboard FastAPI app (contract lifecycle UI, SSE)
โ โโโ sandbox/
โ โ โโโ app.py # Web sandbox UI (edit, test, orchestrate)
โ โโโ agents/
โ โ โโโ __init__.py # AgentWorker, AgentConfig, OllamaClient,
โ โ # ConversationAgent, PactownMonitor
โ โโโ transport/
โ โ โโโ __init__.py # TransportLayer, WebSocketTransport, MQTTTransport
โ โโโ plugins/
โ โโโ base.py # FormatPlugin, APIAdapter, Integration, Channel,
โ โ # PipelineSpec, StepSpec, Pool, Lane, Gateway
โ โโโ registry.py # PluginRegistry (discover, export, import_from)
โ โโโ formats/ # bpmn, xpdl, petri, dmn, cmmn, epc, uml-activity, bpel
โ โโโ integrations/ # kubernetes, gitlab, github, airflow, ansible, n8n,
โ โ # terraform, pactown
โ โโโ api/ # openapi, asyncapi, graphql, grpc, jsonschema
โ โโโ channels/ # sse, websocket, mqtt, redis_pubsub, amqp, nats,
โ # grpc_stream, slack, http_webhook, cli_stdio
โโโ tests/
โโโ test_dsl.py # DSL parser & executor (38 tests)
โโโ test_v2.py # Contract, pipeline, agents v2 (101 tests)
โโโ test_pipeline.py # Pipeline engine (24 tests)
โโโ test_pipeline_scenarios.py # 7 end-to-end scenarios (32 tests)
โโโ test_examples.py # Example block parsing (24 tests)
โโโ test_orchestrator.py # Orchestrator & agents.yml (24 tests)
โโโ test_settings.py # Settings & .env loading (13 tests)
โโโ test_hardware_detect.py # GPU/RAM detection (30 tests)
Configuration
All config lives in two files:
| File | Purpose |
|---|---|
.env |
Ports, hosts, model, log level |
agents.yml |
Agent definitions, pipelines, routes |
Environment Variables (.env)
| Variable | Default | Description |
|---|---|---|
MARKSYNC_PORT |
8765 |
Sync server port |
MARKSYNC_SERVER |
ws://localhost:8765 |
Sync server URI |
MARKSYNC_API_PORT |
8080 |
DSL API port |
OLLAMA_URL |
http://localhost:11434 |
Ollama API endpoint |
OLLAMA_MODEL |
qwen2.5-coder:7b |
LLM model for agents |
MARKPACT_PORT |
8088 |
Markpact app port |
LOG_LEVEL |
INFO |
Logging level |
LLM_PROVIDER |
ollama |
LLM provider (ollama, openrouter, openai, anthropic, litellm) |
LLM_MODEL |
(from provider) | Model name for marksync generate/create |
LLM_API_KEY |
(empty) | API key for cloud providers |
LLM_API_BASE |
(empty) | Custom LiteLLM base URL |
MARKSYNC_AUTH_ENABLED |
false |
Enable token auth for API/sync server |
MARKSYNC_SECRET_KEY |
(random) | JWT/HMAC signing key |
Integration with Markpact
marksync is designed to work with markpact:
# Install both
pip install markpact marksync[all]
# Edit collaboratively with marksync
marksync server README.md
# Deploy with markpact
markpact README.md --run
The deployer agent can automatically trigger markpact rebuilds when code blocks change.
Documentation
- Architecture โ system design, layers, data flow
- DSL Reference โ full command reference for the orchestration DSL
- API Reference โ REST & WebSocket API documentation
- Pipelines โ pipeline engine, human-in-the-loop, retry, events
- Plugins โ plugin system, format export/import, integrations
- Channels โ SSE, WebSocket, MQTT, Redis, AMQP, NATS, Slack
- Formats โ BPMN, XPDL, Petri, DMN, CMMN, EPC, UML, BPEL
- Integrations โ Kubernetes, GitLab, GitHub, Airflow, Ansible, n8n, Terraform
- API Adapters โ OpenAPI, AsyncAPI, GraphQL, gRPC, JSON Schema
- Comparison โ vs Airflow, Camunda, n8n, Temporal, Kubernetes
- Changelog โ version history
- TODO โ roadmap and planned features
License
Licensed under Apache-2.0.
Author
Tom Sapletta
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 marksync-0.2.28.tar.gz.
File metadata
- Download URL: marksync-0.2.28.tar.gz
- Upload date:
- Size: 580.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f457b458bb6a7623b11e4515e6aa2fa07e434238a06f54121ee51047827bd62
|
|
| MD5 |
0693ad56a379d3acd613bbabaadc997c
|
|
| BLAKE2b-256 |
dc4d2e9a3d2fbe2aaac4c49835f22d165eacad2a807329579e5e8e5cee0faa17
|
File details
Details for the file marksync-0.2.28-py3-none-any.whl.
File metadata
- Download URL: marksync-0.2.28-py3-none-any.whl
- Upload date:
- Size: 239.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f5344775ee5b642c8b8d57602a7b64cbb5a1ff3da90c1ce553bfd1b55ef37c77
|
|
| MD5 |
b53d9c9f10e95cc683957a88130d84de
|
|
| BLAKE2b-256 |
2f0d241af251b8f87c84bb2a354cf09c5005e8ad88378c337c9157dafbd71a4c
|