goSign
βοΈ Sign documents without stress
A modern, full-featured document signing platform with multi-signer workflows, email notifications, and comprehensive API. Built with Go and Vue.js, goSign provides enterprise-grade capabilities for secure digital document signing.
Overview
goSign is a complete document signing solution that combines powerful backend services with an intuitive frontend interface. It supports multi-party signing workflows, automated notifications, embedded signing, and extensive API integration capabilities.
β¨ Key Features
Core Signing Features
- π Digital Signatures: X.509 certificates with PKCS7/CMS standards
- β
Document Verification: Full certificate chain validation
- π¨ Visual Signatures: Customizable signature appearance and placement
- π Certificate Management: Generate, manage, and revoke certificates with CRL
- π Trust Updates: Automatic trust certificate updates (every 12h)
Document Workflow
- π₯ Multi-signer Workflow: Sequential or parallel signing with state machine
- π§ Email Notifications: Automated invitations, reminders, and status updates
- π± SMS Support: Optional SMS notifications for signers
- β° Scheduled Reminders: Configurable reminder system
- π Status Tracking: Real-time submission and signer status
API & Integration
- π Dual Authentication: JWT tokens and API keys with rate limiting
- π Swagger Documentation: Interactive API documentation
- π Webhook Support: Real-time event notifications
- πΌοΈ Embedded Signing: JavaScript SDK for iframe integration
- π¦ Bulk Operations: CSV/XLSX import for mass submissions
Advanced Features
- π Template System: Reusable document templates with 14 field types (PDF file import supported)
- ποΈ Flexible Storage: Local, S3 (GCS, Azure planned)
- β‘ Rate Limiting: Configurable API rate limits
- π Event Logging: Comprehensive audit trail
- π― Generic CRUD API: Consistent REST API design
Enterprise Features
- π’ Organizations & Teams: Multi-tenant organization management
- π₯ Role-Based Access Control: Owner, Admin, Member, Viewer roles
- π Organization Context: JWT tokens with organization scope
- π Team Collaboration: Invite members, manage permissions
- ποΈ Organization Templates: Templates scoped to organizations
- π Team Analytics: Organization-level statistics and insights
- π Multilingual (i18n): 7 UI languages, 14 signing portal languages, RTL support
- π Conditional Fields: Show/hide fields based on dynamic conditions
- π Formula Engine: Dynamic field calculations with formula builder
- π¨ White-Label Branding: Custom logos, colors, fonts, signing themes
- π§ Email Templates: Customizable templates with locale support
π οΈ Tech Stack
Backend
- Language: Go 1.25+
- Framework: Fiber v2 (HTTP server)
- Database: PostgreSQL 14+ with JSONB
- Cache: Redis 6+
- Authentication: JWT + API Keys
- Email: SMTP/SendGrid support
- Storage: Local, S3 (GCS, Azure planned)
- PDF Processing:
- digitorus/pdf - PDF reading and digital signing
- signintech/gopdf - PDF creation and manipulation
- Task Scheduling: Built-in Go scheduler
- Logging: zerolog
- API Docs: Swagger/OpenAPI
Frontend
- Framework: Vue 3 + TypeScript (Composition API)
- State Management: Pinia
- Routing: Vue Router
- Styling: Tailwind CSS v4
- Build Tool: Vite
- Package Manager: Bun
- Components:
- UI Library: 21 reusable components (Button, Input, Modal, Table, etc.)
- Common Components: FieldInput (14 field types), ResourceTable, FormModal
- Template Components: Area, Document, Page, Preview
- signature_pad for capture
Project Structure
goSign/
βββ cmd/ # Command-line applications
β βββ goSign/ # Main application
β βββ cert/ # Certificate utilities
β βββ pdf/ # PDF utilities
βββ internal/ # Private application code
β βββ config/ # Configuration management
β βββ handlers/
β β βββ api/ # REST API v1 handlers
β β βββ public/ # Public and auth endpoints
β βββ middleware/ # JWT, rate limiting, CORS
β βββ models/ # Data models (14 models)
β βββ queries/ # Database repositories
β βββ routes/ # API v1 routes
β βββ services/ # Business logic
β β βββ submission/ # Multi-signer workflow
β β βββ apikey/ # API key management
β β βββ reminder/ # Reminder scheduling
β βββ trust/ # Trust certificate management
β βββ worker/ # Background tasks
βββ pkg/ # Public libraries
β βββ pdf/
β β βββ sign/ # Digital signing
β β βββ verify/ # Signature verification
β β βββ fill/ # PDF form filling
β β βββ revocation/ # CRL management
β βββ notification/ # Email/SMS service
β βββ webhook/ # Webhook dispatcher
β βββ storage/ # Blob storage
β β βββ local/ # Local filesystem
β β βββ s3/ # AWS S3/MinIO
β βββ appdir/ # Application data directory (uploads, signed files)
β βββ security/
β β βββ cert/ # Certificate operations
β β βββ password/ # Hashing and validation
β βββ utils/ # Helper functions
βββ web/ # Frontend application
β βββ src/
β β βββ components/
β β β βββ ui/ # 21 reusable UI components
β β β βββ common/ # Generic components (FieldInput, FormModal, ResourceTable)
β β β βββ field/ # Field-specific components
β β β βββ template/ # Document template components
β β βββ composables/ # Vue composables (conditions, formulas, i18n)
β β βββ layouts/ # Page layouts (Main, Profile, Settings)
β β βββ models/ # TypeScript models
β β βββ pages/ # Application pages (Dashboard, Sign, Verify, Settings, etc.)
β β βββ stores/ # Pinia stores
β β βββ utils/ # Frontend utilities
βββ migrations/ # Database migrations
βββ fixtures/ # Test data and fixtures
βββ docker/ # Docker configuration
Installation
Prerequisites
-
Go 1.25 or higher
-
PostgreSQL 14+
-
Redis 6+
-
Bun (for frontend development)
-
Node.js 18+ (alternative to Bun)
-
PDFβJPG (preview generation): pdftoppm from poppler-utils (required for template previews when creating templates from PDF)
| OS |
Package |
Install |
| Debian / Ubuntu |
poppler-utils |
sudo apt install poppler-utils |
| RHEL / Fedora / CentOS |
poppler-utils |
sudo dnf install poppler-utils |
| Alpine |
poppler-utils |
apk add poppler-utils |
| Arch |
poppler |
pacman -S poppler |
| macOS (Homebrew) |
poppler |
brew install poppler |
Backend Setup
- Clone the repository:
git clone https://github.com/shurco/gosign.git
cd gosign
- Install Go dependencies:
go mod download
- Set configuration via environment variables (see
cmd/goSign/.env.example):
cp cmd/goSign/.env.example cmd/goSign/.env
# Edit cmd/goSign/.env: GOSIGN_POSTGRES_URL, GOSIGN_REDIS_ADDRESS, GOSIGN_REDIS_PASSWORD
-
Load .env before running (e.g. launch.json uses cmd/goSign/.env, or export vars in your shell)
-
Run database migrations:
./scripts/migration up
- (Optional) Load test data for development:
./scripts/migration dev up
This will create test users:
- Admin:
admin@gosign.local / admin123
- User 1:
user1@gosign.local / user123
- User 2:
user2@gosign.local / user234
See fixtures/migration/README.md for more details about test data.
Frontend Setup
- Navigate to the web directory:
cd web
- Install dependencies:
bun install
# or
npm install
- Start development server:
bun run dev
# or
npm run dev
Usage
Starting the Application
Run the main application:
go run cmd/goSign/main.go serve
The application will start on http://localhost:8088 (default) with three interfaces:
- Public UI:
http://localhost:8088/ - Document signing and verification
- Admin UI:
http://localhost:8088/_/ - Administration panel
- API:
http://localhost:8088/api/ - REST API endpoints
CLI Commands
# Start the server
go run cmd/goSign/main.go serve
# Run certificate utilities
go run cmd/cert/main.go [options]
API Endpoints
Public Endpoints
POST /verify/pdf - Verify signed document
POST /sign - Sign PDF document
GET /s/:slug - Submitter signing portal
GET /health - Health check
Authentication
POST /auth/signup - User registration
POST /auth/signin - User login (returns JWT + refresh token)
POST /auth/refresh - Refresh access token
POST /auth/signout - User logout
POST /auth/password/forgot - Request password reset
POST /auth/password/reset - Reset password with token
GET /auth/verify-email - Verify email address
POST /auth/2fa/enable - Enable two-factor authentication
POST /auth/2fa/verify - Verify 2FA code
POST /auth/2fa/disable - Disable 2FA
GET /auth/oauth/google - Google OAuth login
GET /auth/oauth/github - GitHub OAuth login
API v1 (Protected)
Note: Below are key examples. Full API includes 42+ endpoints across all resources.
Submissions (8 endpoints)
GET /api/v1/submissions - List submissions
GET /api/v1/submissions/:id - Get submission details
POST /api/v1/submissions - Create submission
PUT /api/v1/submissions/:id - Update submission
POST /api/v1/submissions/send - Send to signers
POST /api/v1/submissions/bulk - Bulk import from CSV
Submitters (6 endpoints)
GET /api/v1/submitters - List submitters
GET /api/v1/submitters/:id - Get submitter details
POST /api/v1/submitters/:id/resend - Resend invitation
POST /api/v1/submitters/:id/complete - Complete signing
POST /api/v1/submitters/:id/decline - Decline signing
Templates (7 endpoints)
GET /api/v1/templates - List templates
GET /api/v1/templates/:id - Get template details
POST /api/v1/templates - Create template
PUT /api/v1/templates/:id - Update template
POST /api/v1/templates/clone - Clone template
POST /api/v1/templates/from-file - Create from PDF
Organizations (6 endpoints)
GET /api/v1/organizations - List user's organizations
GET /api/v1/organizations/:id - Get organization details
POST /api/v1/organizations - Create organization
PUT /api/v1/organizations/:id - Update organization
DELETE /api/v1/organizations/:id - Delete organization
POST /api/v1/organizations/:id/switch - Switch organization context
Organization Members (7 endpoints)
GET /api/v1/organizations/:id/members - List members
POST /api/v1/organizations/:id/members - Add member
PUT /api/v1/organizations/:id/members/:user_id - Update member role
DELETE /api/v1/organizations/:id/members/:user_id - Remove member
Organization Invitations (5 endpoints)
GET /api/v1/organizations/:id/invitations - List invitations
POST /api/v1/organizations/:id/invitations - Send invitation
POST /api/v1/invitations/:token/accept - Accept invitation
DELETE /api/v1/invitations/:id - Revoke invitation
API Keys (6 endpoints)
GET /api/v1/apikeys - List API keys
POST /api/v1/apikeys - Create API key
DELETE /api/v1/apikeys/:id - Revoke key
POST /api/v1/apikeys/:id/enable - Enable key
POST /api/v1/apikeys/:id/disable - Disable key
Webhooks (5 endpoints)
GET /api/v1/webhooks - List webhooks
POST /api/v1/webhooks - Create webhook
PUT /api/v1/webhooks/:id - Update webhook
DELETE /api/v1/webhooks/:id - Delete webhook
Settings (4 endpoints)
GET /api/v1/settings - Get settings
PUT /api/v1/settings/email - Update email config
PUT /api/v1/settings/storage - Update storage config
PUT /api/v1/settings/branding - Update branding
Branding, i18n, Email Templates
GET /api/v1/branding, PUT /api/v1/branding - White-label branding
GET /api/v1/i18n/locales - Available locales
GET /api/v1/email-templates, POST /api/v1/email-templates, PUT /api/v1/email-templates/:id - Email templates
π Complete API Reference:
Configuration
Configuration is read from environment variables (prefix GOSIGN_).
Quick Setup
-
Copy example and set variables:
cp .env.example .env
# Edit .env: GOSIGN_POSTGRES_URL, GOSIGN_REDIS_ADDRESS, GOSIGN_REDIS_PASSWORD, etc.
-
Copy and edit env file: cp cmd/goSign/.env.example cmd/goSign/.env
Variables (infrastructure)
- GOSIGN_HTTP_ADDR: Server address (default:
0.0.0.0:8088)
- GOSIGN_DEV_MODE: Development mode (true/false)
- GOSIGN_POSTGRES_URL: PostgreSQL connection URL
- GOSIGN_REDIS_ADDRESS, GOSIGN_REDIS_PASSWORD: Redis
Application settings (SMTP, storage, features) are managed in the database and Admin UI.
Development
Running Tests
# Run all tests
go test ./...
# Run tests with coverage
go test -cover ./...
# Run specific package tests
go test ./pkg/pdf/sign/...
Building for Production
Backend:
go build -o gosign cmd/goSign/main.go
Frontend:
cd web
bun run build
# or
npm run build
Docker Deployment
docker-compose -f docker/docker-compose.yaml up -d
Key Features Details
PDF Signing
- Supports PAdES (PDF Advanced Electronic Signatures)
- PKCS#7/CMS signature format
- Visual signature placement
- Multiple signature fields support
- Timestamp support
Certificate Management
- X.509 certificate generation
- Certificate Revocation Lists (CRL)
- Certificate chain validation
- Trust store management
- Automatic trust certificate updates
Security
- JWT-based authentication with refresh tokens (7 days)
- Password hashing with bcrypt
- Two-factor authentication (2FA) support
- OAuth integration (Google, GitHub)
- Email verification system
- Password reset with secure tokens
- Secure certificate storage
- Input validation with go-playground/validator
Scripts
Utility scripts are located in the scripts/ directory:
clean - Clean build artifacts and temporary files
key - Generate cryptographic keys
migration - Database migration management
models - Generate data models
tools - Development tools
License
This project is licensed under the GNU General Public License v3.0 (GPL-3.0).
See the LICENSE file for the full license text.
Summary:
- β
You are free to use, modify, and distribute this software
- β
You must keep the same license when distributing
- β
You must include the full license text and source code
- β You cannot use this software in proprietary (closed-source) applications
For more information about GPL-3.0, visit: https://www.gnu.org/licenses/gpl-3.0.html
Contributing
Contributions are welcome! Please read the contributing guidelines before submitting pull requests.
π¬ Support
For issues and questions:
π What's New in v2.0
goSign v2.0 introduces enterprise document signing capabilities:
- β
Multi-party Signing: Complete workflow with sequential/parallel signing
- β
Notification System: Automated emails, SMS, and reminders
- β
API Keys: Secure service-to-service authentication
- β
Rate Limiting: Protection against abuse (100-10 req/min)
- β
Embedded Signing: JavaScript SDK for iframe integration
- β
Bulk Operations: CSV/XLSX import for mass creation
- β
Webhooks: Real-time event notifications
- β
Storage Options: S3, GCS, Azure, or local
- β
Swagger Docs: Interactive API documentation
π’ What's New in v2.1
goSign v2.1 adds enterprise team collaboration features:
- β
Organizations: Multi-tenant organization management
- β
Role-Based Access: Four roles (Owner, Admin, Member, Viewer)
- β
Team Invitations: Email-based member invitations
- β
Organization Context: JWT tokens with organization scope
- β
Team Templates: Templates shared within organizations
- β
Organization Isolation: Data separation between organizations
π What's New in v2.4
goSign v2.4 adds advanced enterprise features:
- β
Multilingual (i18n): 7 UI and 14 signing portal languages, RTL support
- β
Conditional Fields: Show/hide fields based on conditions
- β
Formula Engine: Dynamic calculations with formula builder
- β
White-Label Branding: Custom logos, colors, fonts, signing themes
- β
Email Templates: Customizable templates with locale support
See IMPLEMENTATION_COMPLETE.md and docs/README.md for full details.
π Documentation
Comprehensive documentation is available in the docs/ directory:
Quick Links:
πΊοΈ Roadmap
Completed β
- Multi-signer workflows
- Email/SMS notifications
- API keys and rate limiting
- Embedded signing SDK
- Bulk operations
- Webhook system
- Swagger documentation
- Organizations and role-based access
- Multilingual support (i18n)
- Conditional fields
- Formula engine
- White-label branding
- Custom email templates
Planned
- GCS and Azure blob storage
- Advanced analytics dashboard
- External CA integration
- Mobile application
- E-signature standards (eIDAS)
- Advanced PDF form automation
Made with β€οΈ for secure document signing