Atlas is a Kotlin + Ktor backend demonstrating a RealWorld-compliant API with practical usage examples.
- Clone the repository
- Download and import the Postman collection for testing
- Run the project
The server starts on http://localhost:7003/api/ by default. You can change it in application.yaml.
- Kotlin – Programming language
- Ktor – Web framework
- Koin – Dependency injection
- KotlinX JSON – Serialization/Deserialization
- Java-jwt – JWT authentication
- HikariCP – Database connection pool
- H2 Database – Embedded database
- Exposed – SQL framework for Kotlin
- Slugify – Slug generation
- Swagger UI – API documentation UI
- POST
/api/users– Register a new user - POST
/api/users/login– Authenticate and get access tokens - GET
/api/user– Get the current authenticated user - PUT
/api/user– Update current user profile
- GET
/api/profiles/celeb_{USERNAME}– Get a user's profile (public info + follow status) - POST
/api/profiles/celeb_{USERNAME}/follow– Follow a user - DELETE
/api/profiles/celeb_{USERNAME}/follow– Unfollow a user
- POST
/api/articles– Create an article - GET
/api/articles/{slug}– Get a single article by slug - PUT
/api/articles/{slug}– Update an article - DELETE
/api/articles/{slug}– Delete an article - GET
/api/articles– List articles with optional filters (author, tag, favorited)
- POST
/api/articles/{slug}/comments– Add a comment to an article - DELETE
/api/articles/{slug}/comments/{commentId}– Delete a comment - GET
/api/articles/{slug}/comments– List comments for an article
- GET
/api/tags– Get all available tags
+ core/
+ config/ # Main module, server setup, plugins
+ di/ # Dependency injection
+ exceptions/ # Custom exceptions
+ extensions/ # Extensions and helpers
+ navigation/ # Route navigation
+ security/ # JWT & auth setup
+ features/
+ articles/ # Articles feature
+ data/ # Persistence & tables
+ domain/ # DTOs, contracts
+ presentation/ # Routes
+ comments/...
+ profiles/...
+ tags/...
+ users/...
- Application.kt # Entry point
Contributions are welcome! Feel free to submit pull requests or open issues.
Kenan Karic – kenan.karic@outlook.com