Skip to content

nilukush/article_saver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Article Saver

🚨 Pocket is shutting down on July 8, 2025! Don't lose your saved articles. Article Saver offers one-click import to save your entire library.

🎯 Quick Links

TypeScript React Electron PostgreSQL Express

πŸš€ Enterprise-Grade Article Management System

Save, organize, and read articles with powerful cloud sync, OAuth authentication, and Pocket integration

Quick Start β€’ Downloads β€’ API Docs β€’ Development β€’ Contributing


✨ Features

Core Features

  • πŸ“– Save & Read Articles - Save articles from any URL with automatic content extraction
  • πŸ”„ Cloud Sync - Real-time synchronization across all your devices
  • 🏷️ Smart Organization - Tag, search, and filter your article collection
  • πŸ“± Offline Support - Read your articles anywhere, anytime
  • 🎨 Beautiful Reader - Distraction-free reading experience with customizable themes

Enterprise Features

  • πŸ” OAuth Authentication - Login with Google, GitHub, or email/password
  • πŸ”— Account Linking - Link multiple accounts and access all articles from one place
  • πŸ“₯ Pocket Import - Import your entire Pocket library with one click
  • πŸ”’ Enterprise Security - JWT authentication, rate limiting, and security headers
  • πŸ“Š Bulk Operations - Import, export, and manage thousands of articles efficiently

πŸ’» System Requirements

Desktop Application

  • Windows: Windows 10 or later (64-bit)
  • macOS: macOS 10.15 (Catalina) or later
    • Apple Silicon (M1/M2/M3) native support
    • Intel processors supported
  • Linux: Ubuntu 20.04+, Fedora 36+, or equivalent
    • Requires libfuse2 for AppImage
  • Memory: 4GB RAM minimum, 8GB recommended
  • Storage: 500MB for application + space for articles

Backend Requirements

  • Node.js: v18.0.0 or later
  • PostgreSQL: v14.0 or later
  • Memory: 512MB RAM minimum
  • Storage: Depends on article count

πŸ“₯ Downloads

Download the latest version (v1.1.3) for your platform:

Windows

macOS

Note: If macOS shows "damaged app", run: xattr -cr /Applications/Article\ Saver.app

Linux

View all releases β†’

πŸ“Š Download Statistics

Track our growth and see platform distribution in real-time:

The dashboard shows anonymous download counts from GitHub's public API. No personal data is collected or displayed.

πŸ“Έ Screenshots

Article List
Article List View
Article Reader
Article Reader
Pocket Import
Pocket Import Progress
Add Articles
Add Articles

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                          Article Saver System                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚     Desktop Client      β”‚           Backend API                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β€’ Electron + React      β”‚ β€’ Express.js + TypeScript                 β”‚
β”‚ β€’ Local JSON Database   β”‚ β€’ PostgreSQL Database                     β”‚
β”‚ β€’ Offline-First         β”‚ β€’ Prisma ORM                              β”‚
β”‚ β€’ Content Extraction    β”‚ β€’ JWT Authentication                      β”‚
β”‚ β€’ Real-time Sync        β”‚ β€’ OAuth2 Integration                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ Quick Start

Prerequisites

  • Node.js 18+ and npm 8+
  • PostgreSQL 14+
  • Git

Installation

# Clone the repository
git clone https://github.com/nilukush/article_saver.git
cd article_saver

# Install dependencies
npm run install:all

# Start development servers
npm run dev

This will:

For detailed setup instructions, see DEVELOPMENT.md.

πŸ”§ Configuration

Environment Variables

Create a .env file in the backend directory:

# Database
DATABASE_URL="postgresql://user:password@localhost:5432/article_saver"

# JWT
JWT_SECRET="your-secret-key"
JWT_EXPIRES_IN="7d"

# OAuth (optional)
GOOGLE_CLIENT_ID="your-google-client-id"
GOOGLE_CLIENT_SECRET="your-google-client-secret"
GITHUB_CLIENT_ID="your-github-client-id"
GITHUB_CLIENT_SECRET="your-github-client-secret"

# See backend/.env.example for all options

πŸ“š Documentation

πŸ” Security

Article Saver implements enterprise-grade security:

  • Authentication: JWT tokens with secure refresh mechanism
  • Password Security: bcrypt hashing with 12+ rounds
  • Rate Limiting: 100 requests per 15 minutes
  • Security Headers: CSP, HSTS, X-Frame-Options, etc.
  • Input Validation: All inputs sanitized and validated
  • SQL Injection Prevention: Prisma ORM with parameterized queries

See SECURITY.md for vulnerability reporting.

πŸ’° Monetization & Sustainability

Article Saver is free and open source. To support ongoing development and hosting costs, we use EthicalAds:

  • Privacy First: No user tracking or cookies
  • Developer Focused: Relevant ads for our technical audience
  • Non-Intrusive: Minimal, text-only ads shown only to free users
  • Transparent: Our ad integration is open source

Authenticated users enjoy an ad-free experience. See ETHICAL_ADS_SETUP.md for implementation details.

🀝 Contributing

We welcome contributions! Please see CONTRIBUTING.md for guidelines.

Development Process

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'feat: add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“Š Performance

  • Article Extraction: < 2 seconds average
  • Search: < 100ms for 10,000+ articles
  • Sync: Real-time with conflict resolution
  • Import: 1,000 articles/minute from Pocket

πŸ› οΈ Tech Stack

Backend

  • Runtime: Node.js 20 LTS
  • Framework: Express.js with TypeScript
  • Database: PostgreSQL with Prisma ORM
  • Authentication: JWT + OAuth2 (Google, GitHub)
  • Logging: Winston with rotation
  • Security: Helmet.js, CORS, rate limiting

Desktop

  • Framework: Electron 28
  • UI: React 18 with TypeScript
  • Styling: Tailwind CSS
  • State: Zustand
  • Build: Vite
  • Storage: Local JSON database for offline support

πŸ“¦ Deployment

Backend Deployment

The backend can be deployed to any Node.js hosting platform:

  • Heroku
  • AWS Elastic Beanstalk
  • Google Cloud Run
  • DigitalOcean App Platform

Desktop Distribution

Build installers for all platforms:

cd desktop
npm run dist

πŸ› Troubleshooting

Common Issues

Port already in use

npm run stop
npm run dev

Database connection failed

# Check PostgreSQL is running
pg_isready

# Check connection string in .env
DATABASE_URL="postgresql://..."

OAuth not working

  • Ensure redirect URLs match exactly
  • Check client ID and secret are correct
  • Verify OAuth app settings

See DEVELOPMENT.md for more troubleshooting tips.

πŸ“– Documentation

Quick Links

πŸ”§ Troubleshooting

Common Issues

macOS "damaged app" error

xattr -cr /Applications/Article\ Saver.app

Linux AppImage not running

# Install required dependency
sudo apt install libfuse2  # Ubuntu/Debian
sudo dnf install fuse      # Fedora

# Make AppImage executable
chmod +x Article.Saver-*.AppImage

Windows Defender blocking installation

  • Click "More info" β†’ "Run anyway"
  • Or add exception in Windows Security settings

Cannot connect to backend

  • Check if backend is running: curl http://localhost:3003/health
  • Verify environment variables are set correctly
  • Check firewall settings

For more help, see our Troubleshooting Guide.

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments


Built with ❀️ by the Article Saver Team

Report Bug β€’ Request Feature